文章目录
- 1.引入依赖
- 2.yml配置文件
- 3.设置Redis序列化
- 4.使用教程
- 5.操作String数据类型
- 6.操作Hash数据类型
- 7.操作Set数据类型
- 8.操作List数据类型
- 9.操作Sorted Set 数据类型
1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
2.yml配置文件
spring:
redis:
host: 192.168.150.101
port: 6379
password: 123321
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 100ms
3.设置Redis序列化
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
@Configuration
public class MyRedisConfig {
@Resource
private RedisConnectionFactory factory;
@Bean
public RedisTemplate redisTemplate(){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 设置连接工厂
redisTemplate.setConnectionFactory(factory);
//key的序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
//value的序列化
redisTemplate.setValueSerializer(serializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
om.setTimeZone(TimeZone.getDefault());
om.configure(MapperFeature.USE_ANNOTATIONS, false);
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
om.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance ,ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
om.setSerializationInclusion(JsonInclude.Include.NON_NULL);
serializer.setObjectMapper(om);
return redisTemplate;
}
}
到这一步就完成了配置,接下来就可以使用了!
4.使用教程
使用之前需要对下面的内容有所了解:
这里一帮常用的就是这5种操作类型:
5.操作String数据类型
Redis 是一种内存数据存储系统,经常被用作缓存和以 key-value 形式存储数据。而 redisTemplate 是 Redis 在 Spring 等开源框架中的一种封装,可以很方便地进行 Redis 操作。以下是 redisTemplate 对 value 的常用操作语句:
1. 添加 value:
redisTemplate.opsForValue().set(key, value)
2. 获取 value:
redisTemplate.opsForValue().get(key)
3. 删除 value:
redisTemplate.delete(key)
4. 批量删除 value:
redisTemplate.delete(keys)
5. 判断 key 是否存在,存在则添加失败:
redisTemplate.opsForValue().setIfAbsent(key, value)
6. 手动设置过期时间:
redisTemplate.expire(key, seconds, TimeUnit.SECONDS)
7. 获取 key 的过期时间:
redisTemplate.getExpire(key, TimeUnit.SECONDS)
8. 设置新值并返回旧值:
redisTemplate.opsForValue().getAndSet(key, value)
9. 给 key 对应的 value 追加字符串:
redisTemplate.opsForValue().append(key, value)
10. 获取字符串长度:
redisTemplate.opsForValue().size(key)
注意:以上语句均需在 redisTemplate 对象初始化之后才能使用。另外,上述语句中的 key 和 value 均为 String 类型。
6.操作Hash数据类型
在 Redis 中,Hash 数据类型用于表示具有 key-value 结构的复杂对象,其中 value 是一个属性及其对应的值的映射。使用 RedisTemplate 操作 Hash 数据类型主要涉及以下几个操作:
- 添加属性:
redisTemplate.opsForHash().put(key, field, value)
,其中 key 是 Hash 数据类型的 key,field 是属性名称,value 是属性值。 - 添加多个属性:
redisTemplate.opsForHash().putAll(key, map)
,其中 key 是 Hash 数据类型的 key,map 是包含多个属性及其对应值的 map。 - 获取单个属性:
redisTemplate.opsForHash().get(key, field)
,其中 key 是 Hash 数据类型的 key,field 是属性名称。 - 获取多个属性:
redisTemplate.opsForHash().multiGet(key, fields)
,其中 key 是 Hash 数据类型的 key,fields 是属性名称列表。 - 获取所有属性及其值:
redisTemplate.opsForHash().entries(key)
,其中 key 是 Hash 数据类型的 key。 - 删除单个属性:
redisTemplate.opsForHash().delete(key, field)
,其中 key 是 Hash 数据类型的 key,field 是属性名称。 - 判断属性是否存在:
redisTemplate.opsForHash().hasKey(key, field)
,其中 key 是 Hash 数据类型的 key,field 是属性名称。 - 自增/自减属性值:
redisTemplate.opsForHash().increment(key, field, delta)
,其中 key 是 Hash 数据类型的 key,field 是属性名称,delta 是要增加的值。使用此操作可用于计数器等场景。 - 获取所有属性名称:
redisTemplate.opsForHash().keys(key)
,其中 key 是 Hash 数据类型的 key。 - 获取属性数量:
redisTemplate.opsForHash().size(key)
,其中 key 是 Hash 数据类型的 key。
7.操作Set数据类型
在 Redis 中,Set 数据类型用于存储一些无序、唯一的元素,每个元素都是一个字符串。下面是 RedisTemplate 操作 Set 数据类型常用的一些方法:
- 添加元素:
redisTemplate.opsForSet().add(key, value)
,其中 key 是 Set 数据类型的 key,value 是待添加的元素。 - 删除元素:
redisTemplate.opsForSet().remove(key, values)
,其中 key 是 Set 数据类型的 key,values 是要删除的一个或多个元素。 - 获取所有元素:
redisTemplate.opsForSet().members(key)
,其中 key 是 Set 数据类型的 key,会返回一个包含所有元素的集合(Set)。 - 判断元素是否存在:
redisTemplate.opsForSet().isMember(key, value)
,其中 key 是 Set 数据类型的 key,value 是待判断的元素,在集合中返回 true,否则返回 false。 - 获取 Set 的元素数量:
redisTemplate.opsForSet().size(key)
,其中 key 是 Set 数据类型的 key,获取到的是 Set 中元素的个数。 - 随机返回若干个元素:
redisTemplate.opsForSet().randomMembers(key, count)
,其中 key 是 Set 数据类型的 key,count 是要返回的元素个数(如果不填或填 0,则返回所有元素)。 - 获取两个 Set 之间的差集:
redisTemplate.opsForSet().difference(key1, key2)
,其中 key1 和 key2 是两个 Set 数据类型的 key,返回 key1 中有但 key2 中没有的元素集合。 - 获取两个 Set 之间的交集:
redisTemplate.opsForSet().intersect(key1, key2)
,其中 key1 和 key2 是两个 Set 数据类型的 key,返回 key1 和 key2 中都有的元素集合。 - 获取两个 Set 之间的并集:
redisTemplate.opsForSet().union(key1, key2)
,其中 key1 和 key
8.操作List数据类型
在 Redis 中,List 数据类型用于存储一个有序的元素列表,每个元素都是一个字符串。Redis 提供了一个双向链表的数据结构来实现 List,下面是 RedisTemplate 操作 List 数据类型常用的一些方法:
-
在 List 的头部添加一个元素:
redisTemplate.opsForList().leftPush(key, value)
,其中 key 是 List 数据类型的 key,value 是待添加的元素。 -
在 List 的尾部添加一个元素:
redisTemplate.opsForList().rightPush(key, value)
,其中 key 是 List 数据类型的 key,value 是待添加的元素。 -
获取 List 的长度:
redisTemplate.opsForList().size(key)
,其中 key 是 List 数据类型的 key,返回 List 中元素的个数。 -
获取 List 中指定位置的元素:
redisTemplate.opsForList().index(key, index)
,其中 key 是 List 数据类型的 key,index 是要获取的元素的下标,返回指定位置的元素。 -
获取 List 范围内的所有元素:
redisTemplate.opsForList().range(key, start, end)
,其中 key 是 List 数据类型的 key,start 和 end 分别为范围的起始位置和结束位置,返回范围内的所有元素。 -
删除 List 中指定的元素:
redisTemplate.opsForList().remove(key, count, value)
,其中 key 是 List 数据类型的 key,count 表示删除几个元素(如果为 0 则删除所有匹配到的元素),value 是要删除的元素。 -
从 List 头部弹出一个元素:
redisTemplate.opsForList().leftPop(key)
,其中 key 是 List 数据类型的 key,返回被弹出的元素。 -
从 List 尾部弹出一个元素:
redisTemplate.opsForList().rightPop(key)
,其中 key 是 List 数据类型的 key,返回被弹出的元素。 -
在 List 中指定位置插入一个元素:
redisTemplate.opsForList().set(key, index, value)
,其中 key 是 List 数据类型的 key,index 是指定位置的下标(0 表示头部,-1 表示尾部),value 是要插入的元素。 -
截取 List,保留指定范围内的元素:
redisTemplate.opsForList().trim(key, start, end)
,其中 key 是 List 数据类型的 key,start 和 end 分别为保留范围的起始位置和结束位置。
需要注意的是,以上操作涉及到 List 的操作,因为 List 是有序的元素集合,因此对于元素的位置我们是可以进行控制和操作的。
9.操作Sorted Set 数据类型
在 Redis 中,Sorted Set 数据类型是指一个有序集合,其中每个成员都会关联一个分数(score),分数用于对成员进行排序。以下是 RedisTemplate 操作 Sorted Set 数据类型常用的一些方法:
-
添加一个元素:
redisTemplate.opsForZSet().add(key, value, score)
,其中 key 是 Sorted Set 数据类型的 key,value 是待添加的元素,score 是该元素的分数。 -
获取元素在 Sorted Set 中的排名(下标):
redisTemplate.opsForZSet().rank(key, value)
,其中 key 是 Sorted Set 数据类型的 key,value 是待查询的元素。 -
获取指定范围内的元素及分数:
redisTemplate.opsForZSet().rangeWithScores(key, start, end)
,其中 key 是 Sorted Set 数据类型的 key,start 和 end 分别为范围的起始位置和结束位置。 -
获取元素在 Sorted Set 中的分数:
redisTemplate.opsForZSet().score(key, value)
,其中 key 是 Sorted Set 数据类型的 key,value 是待查询的元素。 -
获取指定范围内的元素数量:
redisTemplate.opsForZSet().count(key, min, max)
,其中 key 是 Sorted Set 数据类型的 key,min 和 max 分别为分数的最小值和最大值。 -
获取 Sorted Set 元素数量:
redisTemplate.opsForZSet().size(key)
,其中 key 是 Sorted Set 数据类型的 key,返回 Sorted Set 中元素的个数。 -
删除 Sorted Set 中的指定元素:
redisTemplate.opsForZSet().remove(key, values)
,其中 key 是 Sorted Set 数据类型的 key,values 是要删除的一个或多个元素。 -
获取指定范围内的元素和分数(从大到小排序):
redisTemplate.opsForZSet().reverseRangeWithScores(key, start, end)
,其中 key 是 Sorted Set 数据类型的 key,start 和 end 分别为范围的起始位置和结束位置。 -
获取指定分数范围内的元素和分数(升序):
redisTemplate.opsForZSet().rangeByScoreWithScores(key, min, max)
,其中 key 是 Sorted Set 数据类型的 key,min 和 max 分别为分数的最小值和最大值。 -
获取指定分数范围内的元素和分数(降序):
redisTemplate.opsForZSet().reverseRangeByScoreWithScores(key, min, max)
,其中 key 是 Sorted Set 数据类型的 key,min 和 max 分别为分数的最小值和最大值。
需要注意的是,以上操作均可以根据指定的分数对 Sorted Set 的元素进行排序。在 Redis 中,如果遇到相同的分数,则会根据元素的字符串排序来进行排名。