Spring&redis整合RedisTemplate操作{String、List、Set、Zset、Hash}五种数据类型常用方法【超详细+附过程效果图】

最近回顾Spring-redis整合时,事后做了个RedisTemplate存储数据类型相关方法使用过程总结,希望也能够帮助到大家!!
(建议收藏)

String类型

1.设置当前的key以及value

redisTemplate.opsForValue().set(key, value);

 2.增减指定key的vaue值(正值则自增,负值则自减)

方式一:可同时修改value值

redisTemplate.opsForValue().increment(key, increment);


方式二:只对key存活时间操作

redisTemplate.expire(key,timeout,timeUnit);

 3.设置当前的key以及value值并且设置过期时间

redisTemplate.opsForValue().set(key, value, timeout, timeunit)
/*
timeunit使用
TimeUnit.DAYS //天
TimeUnit.HOURS //小时
TimeUnit.MINUTES //分钟
TimeUnit.SECONDS //秒
TimeUnit.MILLISECONDS //毫秒
*/

 4.判断指定key是否存在(存在返回true,相反返回false)

Boolean key= redisTemplate.hasKey(key);

5.判断添加key及value,如果key存则返回false无效操作,否则返回true进行添加 

redisTemplate.opsForValue().setIfAbsent(key, value);

6. 将指定key赋新的value并返回其该key原先的value

redisTemplate.opsForValue().getAndSet(key, value);

7.追加指定key的value字符串值

redisTemplate.opsForValue().append(key, value);

8.获取指定字符串的长度

redisTemplate.opsForValue().size(key);

 9.1将map集合添加到redis中

  • 解释:map的key-value对应redis中key-value(支持批添)
redisTemplate.opsForValue().multiSet(map);


9.2对应的map集合名称不存在,则添加否则不做修改

redisTemplate.opsForValue().multiSetIfAbsent(valueMap); 
  • key存在返回false(无效操作) 效果图

  • key不存在,返回true,执行成功效果图

10.返回指定key所存储的值的类型

DataType keyType= redisTemplate.type(key);

11.修改指定key的名称

redisTemplate.rename(oldKey,newKey);

12. 判断key是否存在,存在则修改key名,不存在则报错

 redisTemplate.renameIfAbsent(oldKey,newKey);

13. 删除指定key

redisTemplate.delete(key);

14.返回指定key所对应的剩余过期时间

方式一:以秒为单位返回剩余生存时间

Long name = redisTemplate.getExpire(key);

方式二:指定返回时间单位(秒/分钟/小时/天) 

Long name = redisTemplate.getExpire(key,timeunit);
/*
TimeUnit.DAYS //天
TimeUnit.HOURS //小时
TimeUnit.MINUTES //分钟
TimeUnit.SECONDS //秒
TimeUnit.MILLISECONDS //毫秒
*/

15:设置指定key永久保护,移除存活时间 

redisTemplate.persist(key);

16.将指定的key从当前(移除)数据库移动到指定redis中数据库当中

redisTemplate.move(key, dbIndex)


List类型

1.1向指定list的队列头部添加value

redisTemplate.opsForList().leftPush(key, value)

 1.2向指定list的队列头部批量添加value

redisTemplate.opsForList().leftPushAll(key, value1 [value,...])

2.向指定list的队列尾部添加value

redisTemplate.opsForList().rightPush(key,value);

 2.2向指定list的队列尾部批量添加value 

redisTemplate.opsForList().rightPushAll(key, value1 [value,...])

3.通过索引获取指定key的value

Object value= redisTemplate.opsForList().index(key,index);

4.获取指定key指定范围内的value(start开始位置, 0是开始位置,end 结束位置, -1返回所有)

List list = redisTemplate.opsForList().range(key, startindex, endindex);

 返回所有

5.判断List是否存在,存在则向指定key的(头部/尾部)添加单个value(不存在则无效操作)

redisTemplate.opsForList().leftPushIfPresent(key,value)
redisTemplate.opsForList().rightPushIfPresent(key,value)

6.设置指定索引处指定key的value(覆盖旧值)

redisTemplate.opsForList().set(key, index, value)

 7.移除并获取指定list中(队列-头部/尾部)第一个元素

  • 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
Object list = redisTemplate.opsForList().leftPop(key);
Object list2 = redisTemplate.opsForList().rightPop(key);

8. 将一个队列的右边弹出一个元素并将这个元素放入另一个指定队列的最左边

redisTemplate.opsForList().rightPopAndLeftPush(sourceKey, destinationKey)

9.删除指定key集合中值等于value的元素

  • index=0, 删除所有值等于value的元素
  • index>0, 从头部开始删除第一个值等于value的元素
  • index<0, 从尾部开始删除第一个值等于value的元素
redisTemplate.opsForList().remove(key, index, value)

10.剪裁指定key(list列表)

redisTemplate.opsForList().trim(key, start, end)

11.获取指定key(List列表)长度

redisTemplate.opsForList().size(key)


Set类型

1.向指定key(set)中添加元素(支持批添)

redisTemplate.opsForSet().add(key, value [value,...])

2.移除指定key(set)的元素(单个、多个)

redisTemplate.opsForSet().remove(key, value [value,...])

3.获取指定key(集合)的元素个数

redisTemplate.opsForSet().size(key)

4.判断指定set集合是否包含value(包含返回true,不包含返回false)

redisTemplate.opsForSet().isMember(key, value)

5.获取两个集合的交集(key对应的无序集合与otherKey对应的无序集合共同拥有的元素)

redisTemplate.opsForSet().intersect(key, otherKey)

6.将key集合与otherKey集合的交集存储到destKey集合中(其中otherKey可以为单个值或者集合)

redisTemplate.opsForSet().intersectAndStore(key, otherKey, destKey)

7.获取两个或者多个集合的并集(otherKeys可以为单个值或者是集合)

redisTemplate.opsForSet().union(key, otherKeys)

8.key集合与otherKey集合的并集存储到destKey中(otherKeys可以为单个值或者是集合)

redisTemplate.opsForSet().unionAndStore(key, otherKey, destKey)

9.获取两个或者多个集合的差集(otherKeys可以为单个值或者是集合)

redisTemplate.opsForSet().difference(key, otherKeys)
  • 获取key中otherKeys没有的元素 

10.将key和otherKets差集存储到destKey中(otherKeys可以为单个值或者集合)

redisTemplate.opsForSet().differenceAndStore(key, otherKey, destKey)

11.获取指定(key)集合中的所有元素

redisTemplate.opsForSet().members(key)

12.随机获取集合中任意(count)个元素

redisTemplate.opsForSet().randomMembers(key, count)

13.随机获取集合中的一个元素

redisTemplate.opsForSet().randomMember(key)


ZSet类型

  • ZSetOperations提供了一系列方法对有序集合进行操作

1.1添加元素(有序集合是按照元素的score值由小到大进行排列)

redisTemplate.opsForZSet().add(key, value, score)

2.删除指定key对应的value(value可以为多个值)

redisTemplate.opsForZSet().remove(key, value ,[value ...])

3.增加指定key(zset)元素value的score值,并返回增加后的值

redisTemplate.opsForZSet().incrementScore(key, value, delta)

4.返回指定key(zset)元素在集合的排名

  • 有序集合是按照元素的score值由小到大排列(返回下标)
redisTemplate.opsForZSet().rank(key, value)

5.返回指定key(zset)元素在集合的排名

  • 按元素的score值由大到小排列(返回下标)
redisTemplate.opsForZSet().reverseRank(key, value)

6.获取指定集合中给定区间(下标)的元素 

  • (start 开始位置,end 结束位置, -1查询所有)
  • (仅显示value,不显示score,下一个显示score)

score由小到大显示

redisTemplate.opsForZSet().range(key, start,end)

 score由大到小显示

redisTemplate.opsForZSet().reverseRange(key, start,end)

7.获取指定集合按照Score值范围查询集合中的元素+score

  • 查询min~max之间的score元素

score从小到大排序

Set<ZSetOperations.TypedTuple<Object>> zset = redisTemplate.opsForZSet().rangeByScoreWithScores(key, min, max);

score结果从大到小排序

Set<ZSetOperations.TypedTuple<Object>> zset = redisTemplate.opsForZSet().reverseRangeByScore(key, min, max)

8.获取指定集合按score从高到底指定score与下标范围内的元素

  • score范围内 min~max
  • strat~end下标范围内
  • 按score从高到底获取
redisTemplate.opsForZSet().reverseRangeByScore(key, min, max, start, end)

9.获取指定集合的score范围内的元素数量

 Long count= redisTemplate.opsForZSet().count(key, min, max)

10.获取指定集合的大小(元素个数)

Long count= redisTemplate.opsForZSet().size(key)

11.获取集合中key、value元素对应的score值

redisTemplate.opsForZSet().score(key, value)

12.删除指定索引区间范围内的所有元素

  • start 开始位置,end 结束位置, -1查询所有
redisTemplate.opsForZSet().removeRange(key, start, end)

13.移除指定score范围的集合成员

redisTemplate.opsForZSet().removeRangeByScore(key, min, max)

14.获取key和otherKey的并集并存储在destKey中

  • otherKeys可以为单个字符串或者字符串集合
redisTemplate.opsForZSet().unionAndStore(key, otherKey, destKey)

15.获取key和otherKey的交集并存储在destKey中

  • 其中otherKeys可以为单个字符串或者字符串集合
redisTemplate.opsForZSet().intersectAndStore(key, otherKey, destKey)

16.遍历指定集合(和iterator一模一样)

  • 获取value和score
Cursor<ZSetOperations.TypedTuple<Object>> scan = opsForZSet.scan(key, ScanOptions.NONE);
while (scan.hasNext()){
    ZSetOperations.TypedTuple<Object> next= scan.next();
    System.out.println(next.getValue() + ":" + next.getScore());
}


Hash类型

1.新增hashMap值

方式一:单个添加key-value

redisTemplate.opsForHash().put(key, hashKey, value)

 方式二:批量添加key-value

​redisTemplate.opsForHash().putAll(key, maps);

方式三:仅当hashKey不存在时才设置 

redisTemplate.opsForHash().putIfAbsent(key, hashKey, value)

2.获取变量中的键值对

redisTemplate.opsForHash().entries(key)

3.获取变量中的指定map键是否有值,如果存在该map键则获取值,没有则返回null。

redisTemplate.opsForHash().get(key, field)

4.使指定hash中的键以long值的大小进行自增长。

redisTemplate.opsForHash().increment(H key, HK hashKey, long delta)

5.删除指定hash中一个或者多个键

redisTemplate.opsForHash().delete(key, fields)

6.判断指定hash中是否有指定的map键

redisTemplate.opsForHash().hasKey(key, field);

7.给指定哈希表key中的指定键的整数/小数值加上增量increment

redisTemplate.opsForHash().increment(key, field, increment);

8.获指定hash中所有键

redisTemplate.opsForHash().keys(key)

9.获取hash表中存在的所有的值

redisTemplate.opsForHash().values(key);

10.获取指定hash表中键的数量

redisTemplate.opsForHash().size(key)

11.Scan匹配获取键值对

方式一:ScanOptions.NONE为获取全部键对

Cursor<Map.Entry<Object,Object>> cursor = redisTemplate.opsForHash().scan("Goods",ScanOptions.NONE);
        while (cursor.hasNext()){
            Map.Entry<Object,Object> next = cursor.next();
            System.out.println(next.getKey() + ":" + next.getValue());
        }

方式二:ScanOptions.scanOptions().match("price").build() 匹配获取键位map1的键值对,不能模糊匹配

Cursor<Map.Entry<Object,Object>> cursor = redisTemplate.opsForHash().scan("Goods",ScanOptions.scanOptions().match("price").build());
        while (cursor.hasNext()){
            Map.Entry<Object,Object> next = cursor.next();
            System.out.println(next.getKey() + ":" + next.getValue());
        }

 


以上便是spring & redis 整合的常用五种常规数据存储类型方法的使用详情总结,因为记忆不是很好,所以会抽空在此CNSN上发布一些日常总结,便于回顾,同时与大家交流学习上的问题,共同进步

相关文章 

 【Redis】Redis下载+安装及(服务端/客户端)启动+停止+环境配置(Linux系统演示详程)_萌小崔的博客-CSDN博客

【附图最详细】Redis键(key)操作命令_萌小崔的博客-CSDN博客

【附图最详细】 Redis命令 - Connection(连接) {AUTH、ECHO、PING、QUIT、SELECT}命令语法用法解释_萌小崔的博客-CSDN博客


 如有疑问,留言互动,Thanks!

  • 15
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北九二七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值