Spring Data Redis 集成了 Lettuce 和 Jedis,这是两个流行的 Redis 开源 Java 库。
springboot整合数据库类型都是在spring-data下
导入依赖
redis依赖和连接池。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-pool2artifactId>
dependency>
data:
redis:
database: 6
host: localhost
port: 6379
password:
timeout: 10s
lettuce:
pool:
# 连接池最大连接数 默认8 ,负数表示没有限制
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1
max-wait: -1
# 连接池中的最大空闲连接 默认8
max-idle: 8
# 连接池中的最小空闲连接 默认0
min-idle: 0
如果是用springboot默认配置的话那么就不用管这部分了。
配置序列化
// 配置bean
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(RedisSerializer.json());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
redisTemplate.setHashValueSerializer(RedisSerializer.json());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
见名知意,set啥serializer就行了
常见的序列化器
序列化器 | 说明 |
---|---|
StringRedisSerializer | string/byte[]自带的,速度快 |
JdkSerializationRedisSerializer | jdk自带 |
OxmSerializer | xml序列化器,占空间速度慢 |
Jackson2JsonRedisSerializer | json序列化,需要定义javatype |
GenericJackson2JsonRedisSerializer | json序列化,不需要定义javatype |
我这样的RedisSerializer枚举了一些序列化器。
为了方便使用我们可以提前讲一个operations注册成bean。
这部分也可以先看操作在来回头看。
@Bean
public ValueOperations<String,Object> valueOperations(RedisTemplate<String,Object> redisTemplate){
return redisTemplate.opsForValue();
}
然后就可以在使用的时候自动装配了
@Autowired
private ValueOperations<String,Object> b;
自动装配类提供了以下2个redis模板
2者都是线程安全的,开合既用
一般都是使用其,对应operations来处理对应的数据结构
这里先介绍基础的操作
Long countExistingKeys(Collection<K> keys) 计算存在的数量。keys
Long convertAndSend(String channel, Object message) 将给定消息发布到给定通道。
Long delete(Collection<K> keys) 删除给定的 .keys
Boolean delete(K key) 删除给定的 .key
Boolean expire(K key, long timeout, TimeUnit unit) 设置给定的生存时间。key
Long getExpire(K key) 在几秒钟内获得生存时间。key
Long getExpire(K key, TimeUnit timeUnit) 获取居住时间并将其转换为给定的时间单位。key
Boolean hasKey(K key) 确定给定是否存在。key
Set<K> keys(K pattern)查找与给定 匹配的所有键。 pattern
Integer append(K key, String value) 将 追加到 。valuekey
Long decrement(K key) 将存储为字符串值的整数值减 1。key
Long decrement(K key, long delta) 递减 下存储为字符串值的整数值。keydelta
Double increment(K key, double delta) 递增存储为字符串值的浮点数值。keydelta
同样的还有long类型
V get(Object key) 获取 的值。key
V getAndDelete(K key) 返回值 at 并删除键。key
V getAndExpire(K key, long timeout, TimeUnit unit) 在 返回值,并通过应用 使密钥过期。keytimeout
V getAndExpire(K key, Duration timeout) 在 返回值,并通过应用 使密钥过期。keytimeout
V getAndPersist(K key) 返回值 at 并保留密钥。key
V getAndSet(K key, V value) 集合并返回其旧值。valuekey
Boolean getBit(K key, long offset) 获取 处值为 的位值。offsetkey
List<V> multiGet(Collection<K> keys) 获取多个 .keys
void multiSet(Map<? extends K,? extends V> map) 使用 中提供的键值对将多个键设置为多个值。tuple
Boolean multiSetIfAbsent(Map<? extends K,? extends V> map) 仅当提供的键时,才使用提供的键值对将多个键设置为多个值 不存在。tuple
void set(K key, V value) 设置为 。valuekey
void set(K key, V value, long offset) 用给定的 覆盖从指定开始的部分。keyoffsetvalue
void set(K key, V value, long timeout, TimeUnit unit) 为 的 设置 和 过期时间。valuetimeoutkey
default void set(K key, V value, Duration timeout) 为 的 设置 和 过期时间。valuetimeoutkey
Boolean setBit(K key, long offset, boolean value) 将位设置为 in 值,存储在 。offsetkey
Boolean setIfAbsent(K key, V value) 设置为在不存在时保存字符串。keyvaluekey
Boolean setIfAbsent(K key, V value, long timeout, TimeUnit unit) 设置为保存字符串,如果不存在,则过期。keyvaluetimeoutkey
default Boolean setIfAbsent(K key, V value, Duration timeout) 设置为保存字符串,如果不存在,则过期。keyvaluetimeoutkey
Long
size(K key)
获取存储在 处的值的长度。key
其他的就不一一枚举了
都是对应的类型+Operations
如
HashOperations hash类型
GeoOperations 地理位置类型
ListOperations 链表
ZSetOperations 有序集合
SetOperations 无序集合
如果你不希望每次都需要
redisTemplate.opsForValue();
进行操作就可以封装一个自己习惯的工具类如
public interface RedisService {
/**
* 保存属性
*/
void set(String key, Object value, long time);
/**
* 保存属性
*/
void set(String key, Object value);
}
@Service
public class RedisServiceImpl implements RedisService {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Override
public void set(String key, Object value, long time) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
}
}