Redis是最常用的KV数据库,Spring 通过模板方式(RedisTemplate)提供了对Redis的数据查询和操作功能。本文主要介绍基于RedisTemplate + lettuce方式对Redis进行查询和操作的案例。
一、Redis基础数据类型
首先对redis来说,所有的key(键)都是字符串。我们在谈基础数据结构时,讨论的是存储值的数据类型,主要包括常见的5种数据类型,分别是:String、List、Set、Zset、Hash。
结构类型 |
结构存储的值 |
结构的读写能力 |
String字符串 |
可以是字符串、整数或浮点数 |
对整个字符串或字符串的一部分进行操作;对整数或浮点数进行自增或自减操作; |
List列表 |
一个链表,链表上的每个节点都包含一个字符串 |
对链表的两端进行push和pop操作,读取单个或多个元素;根据值查找或删除元素; |
Set集合 |
包含字符串的无序集合 |
字符串的集合,包含基础的方法有看是否存在添加、获取、删除;还包含计算交集、并集、差集等 |
Hash散列 |
包含键值对的无序散列表 |
包含方法有添加、获取、删除单个元素 |
Zset有序集合 |
和散列一样,用于存储键值对 |
字符串成员与浮点数分数之间的有序映射;元素的排列顺序由分数的大小决定;包含方法有添加、获取、删除单个元素以及根据分值范围或成员来获取元素 |
二、 Redis常用连接池
Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持。
Redisson:实现了分布式和可扩展的Java数据结构。
Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。
三、SpringBoot集成Redis案例
1、yml配置常量:
redis:
# 地址
host: 192.168.1.66
# 端口,默认为6379
port: 6379
# 数据库索引
database: 0
# 密码(如没有密码请注释掉)
password: 123456
# 连接超时时间
timeout: 3000
# 是否开启ssl
ssl: false
lettuce:
pool:
max-active: 1000 # 连接池最大连接数(使用负值表示没有限制)
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 10 # 连接池中的最大空闲连接
min-idle: 5 # 连接池中的最小空闲连接
2、pom.xml引入依赖:
org.springframework.boot
spring-boot-starter-data-redis
2.4.0
org.apache.commons
commons-pool2
2.8.0
3、RedisConfig配置类:
package com.cn.common.conf;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
/**
* redis配置类
*
* @author zq
*/
@Configuration
@EnableCaching
public class RedisConfig {
// 倘若 spring.redis.host 不存在,则会默认为127.0.0.1.
@Value("${spring.redis.host:#{'127.0.0.1'}}")
private String hostName;
@Value("${spring.redis.port:#{6379}}")
private int port;
@Value("${spring.redis.password:#{123456}}")
private String password;
@Value("${spring.redis.timeout:#{3000}}")
private int timeout;
@Value("${spring.redis.lettuce.pool.max-idle:#{16}}")
private int maxIdle;
@Value("${spring.redis.lettuce.pool.min-idle:#{1}}")
private int minIdle;
@Value("${spring.redis.lettuce.pool.max-wait:#{16}}")
private long maxWaitMillis;
@Value("${spring.redis.lettuce.pool.max-active:#{16}}")
private int maxActive;
@Value("${spring.redis.database:#{0}}")
private int databaseId;
@Bean
public LettuceConnectionFactory lettuceConnectionFactory() {
RedisConfiguration redisConfiguration = new RedisStandaloneConfiguration(
hostName, port
);
// 设置选用的数据库号码
((RedisStandaloneConfiguration) redisConfiguration).setDatabase(databaseId);
// 设置 redis 数据库密码
((RedisStandaloneConfiguration) redisConfiguration).setPassword(password);
// 连接池配置
GenericObjectPoolConfig