RedisTemplate操作Redis,这一篇文章就够了(一)ha_lydms的博客-CSDN博客redistemplate
Redis
redis是一款开源的Key-Value数据库,运行在内存中,由C语言编写。企业开发通常采用Redis来实现缓存。同类的产品还有memcache 、memcached 等。
Jedis
Jedis是Redis官方推出的一款面向Java的客户端,提供了很多接口供Java语言调用。可以在Redis官网下载,当然还有一些开源爱好者提供的客户端,如Jredis、SRP等等,推荐使用Jedis。
Spring Data Redis
Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅,并对spring 3.1 cache进行了实现。 spring-data-redis针对jedis提供了如下功能:
连接池自动管理,提供了一个高度封装的“RedisTemplate”类
针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口
ValueOperations:简单K-V操作 SetOperations:set类型数据操作 ZSetOperations:zset类型数据操作 HashOperations:针对map类型的数据操作 ListOperations:针对list类型的数据操作
提供了对key的“bound”(绑定)便捷化操作API,可以通过bound封装指定的key,然后进行一系列的操作而无须“显式”的再次指定Key,即BoundKeyOperations:
将事务操作封装,有容器控制。
针对数据的“序列化/反序列化”,提供了多种可选择策略(RedisSerializer)
JdkSerializationRedisSerializer:POJO对象的存取场景,使用JDK本身序列化机制,将pojo类通过ObjectInputStream/ObjectOutputStream进行序列化操作,最终redis-server中将存储字节序列。是目前最常用的序列化策略。StringRedisSerializer:Key或者value为字符串的场景,根据指定的charset对数据的字节序列编码成string,是“new String(bytes, charset)”和“string.getBytes(charset)”的直接封装。是最轻量级和高效的策略。JacksonJsonRedisSerializer:jackson-json工具提供了javabean与json之间的转换能力,可以将pojo实例序列化成json格式存储在redis中,也可以将json格式的数据转换成pojo实例。因为jackson工具在序列化和反序列化时,需要明确指定Class类型,因此此策略封装起来稍微复杂。【需要jackson-mapper-asl工具支持】
RedisTemplate中API使用
pom.xml依赖
1 | <!--Redis--> |
配置文件
1 | # Redis服务器连接端口 |
RedisTemplate的直接方法
首先使用@Autowired注入RedisTemplate(后面直接使用,就不特殊说明)
1 |
|
删除单个key
1 | // 删除key |
1 | // 删除多个key |
1 | // 根据key获取过期时间 |
1 | // 判断key是否存在 |
String类型相关操作
添加缓存(2/3是1的递进值)
1 | //1、通过redisTemplate设置值 |
获取具体操作接口对象的方法
ReactiveGeoOperations<K, V> opsForGeo();
返回地理空间特定操作接口。
返回:地理空间特定操作。
1 | <HK, HV> ReactiveHashOperations<K, HK, HV> opsForHash(); |
返回对哈希值执行的操作。
Returns: hash operations.
ReactiveHyperLogLogOperations<K, V> opsForHyperLogLog();
返回使用 HyperLogLog 对多重集执行的操作。
ReactiveListOperations<K, V> opsForList();
Returns the operations performed on list values.
Returns: list operations.
ReactiveSetOperations<K, V> opsForSet();
Returns the operations performed on set values. Returns: set operations.
ReactiveValueOperations<K, V> opsForValue();
Returns the operations performed on simple values (or Strings in Redis terminology). Returns:value operations
ReactiveZSetOperations<K, V> opsForZSet();
Returns the operations performed on zset values (also known as sorted sets). Returns: zset operations.
设置过期时间(单独设置)
1 | redisTemplate.boundValueOps("StringKey").expire(1,TimeUnit.MINUTES); |
获取缓存值(2/3是1的递进值
1 | //1、通过redisTemplate设置值 |
删除key
Boolean result = redisTemplate.delete("StringKey");
顺序递增
redisTemplate.boundValueOps("StringKey").increment(3L);
Hash类型相关操作
添加缓存(2/3是1的递进值)
1 | //1、通过redisTemplate设置值 |
1 | /** |
设置过期时间(单独设置)
1 | redisTemplate.boundValueOps("HashKey").expire(1,TimeUnit.MINUTES); |
添加一个Map集合
1 | HashMap<String, String> hashMap = new HashMap<>(); |
提取所有的小key
1 | //1、通过redisTemplate获取值 |
提取所有的value值
1 | //1、通过redisTemplate获取值 |
根据key提取value值
1 | //1、通过redisTemplate获取 |
获取所有的键值对集合
1 | //1、通过redisTemplate获取 |
删除
1 | //删除小key |
判断Hash中是否含有该值
1 | Boolean isEmpty = redisTemplate.boundHashOps("HashKey").hasKey("SmallKey"); |
Zset类型的相关操作
向集合中插入元素,并设置分数
1 | //1、通过redisTemplate设置值 |
向集合中插入多个元素,并设置分数
1 | DefaultTypedTuple<String> p1 = new DefaultTypedTuple<>("zSetVaule1", 2.1D); |
按照排名先后(从小到大)打印指定区间内的元素, -1为打印全部
1 | Set<String> range = redisTemplate.boundZSetOps("zSetKey").range(0, -1); |
获得指定元素的分数
Double score = redisTemplate.boundZSetOps("zSetKey").score("zSetVaule");
返回集合内指定分数范围的成员个数(Double类型)
1 | Long COUNT = redisTemplate.boundZSetOps("zSetKey").count(0D, 2.2D); |
返回集合内元素的排名,以及分数(从小到大)
1 | Set<TypedTuple<String>> tuples = redisTemplate.boundZSetOps("zSetKey").rangeWithScores(0L, 3L); |