当前位置:   article > 正文

StringRedisTemplate、opsForValue、setIfAbsent、setIfPresent、getAndSet、increment、decrement用法_stringredistemplate.opsforvalue().setifabsent

stringredistemplate.opsforvalue().setifabsent

关于RedisTemplate的介绍
https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/RedisTemplate.html

关于StringRedisTemplate的介绍
https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/StringRedisTemplate.html

配置redis
https://preparedata.blog.csdn.net/article/details/114291049

StringRedisTemplate 继承了 RedisTemplate<String, String>, 的key和value都必须是String类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

StringRedisTemplate中包含 opsForValue(字符串), opsForZSet(sorted set:有序集合), opsForList(列表), opsForSet(集合), opsForHash(哈希)的处理

本篇主要介绍opsForValue(字符串), 字符串类型的Redis存储引用最广泛, 任意对象都可以序列化字符串后存储
引入jar, org.springframework.boot:spring-boot-starter-data-redis; 版本为2.1.5.RELEASE
不同版本方法可能存在差异


一.注入StringRedisTemplate

@Autowired
private StringRedisTemplate redisTemplate;
  • 1
  • 2

二.写入

2.1 opsForValue().set()

// 存入, 无过期时间
redisTemplate.opsForValue().set("key1","value1");
//存入, 有过期时间,过期时间到后,自动删除
redisTemplate.opsForValue().set("key1","value1",60,TimeUnit.SECONDS);
  • 1
  • 2
  • 3
  • 4

2.2 opsForValue().setIfAbsent()

//当前key不存在,写入值, 并返回true; 当前key已经存在,不处理, 返回false;  Absent: 缺少的,
Boolean bool = redisTemplate.opsForValue().setIfAbsent("key1","value1",60,TimeUnit.SECONDS);
  • 1
  • 2

2.3 opsForValue().setIfPresent()

//当前key已经存在,写入值, 并返回true; 当前key不存在,不处理, 返回false;  ;Present: 存在的
Boolean bool1 = redisTemplate.opsForValue().setIfPresent("key1","value1",60,TimeUnit.SECONDS);
  • 1
  • 2

2.4 opsForValue().getAndSet()

//获取原来key的value, 再将新的value写入
String dataStr1 = redisTemplate.opsForValue().getAndSet("key1", "value2");
  • 1
  • 2

2.5 opsForValue().multiSet()

//批量设置
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
redisTemplate.opsForValue().multiSet(map);
  • 1
  • 2
  • 3
  • 4
  • 5

三.读取

3.1 opsForValue().get()

String dataStr = redisTemplate.opsForValue().get("key1");
  • 1

3.2 opsForValue().getAndSet()

//获取原来key的value, 再将新的value写入
String dataStr1 = redisTemplate.opsForValue().getAndSet("key1", "value2");
  • 1
  • 2

3.2 opsForValue().multiGet()

//批量获取
List<String> keyList = new ArrayList<>();
keyList.add("key1");
keyList.add("key2");
List<String> valueList = redisTemplate.opsForValue().multiGet(keyList);
  • 1
  • 2
  • 3
  • 4
  • 5

3.2 opsForValue().size()

//获取value的字符长度
Long len = redisTemplate.opsForValue().size("key1");
  • 1
  • 2

四.追加

4.1 opsForValue().append()

//追加到末尾, 返回追加后的字符长度; 如果key不存在,则新设置value; 如果key存在,则原value追加新的value;
Integer a = redisTemplate.opsForValue().append("key1","value2");
  • 1
  • 2

五、递增或递减

5.1 opsForValue().increment()

//值进行递增或递减, 返回新value;要求value必须可转成数值型
//如果key不存在, 则在默认值0的基础上进行递增或递减
//increment: 递增;可以是使用负数进行递减
Long num1 = redisTemplate.opsForValue().increment("key1", -1);
Long num = redisTemplate.opsForValue().increment("key1", 1);
  • 1
  • 2
  • 3
  • 4
  • 5

5.2 opsForValue().decrement()

//值进行递增或递减, 返回新的值;要求value必须可转成数值型
//如果key不存在, 则在默认值0的基础上进行递增或递减
//decrement: 递减;可以是使用负数进行递增
Long num2 = redisTemplate.opsForValue().decrement("key2", 1);
Long num3 = redisTemplate.opsForValue().decrement("key2", -1);
  • 1
  • 2
  • 3
  • 4
  • 5

特别注意:decrement使用时, 当参数delta递减值为负数时,表示递增,逻辑相反


六.删除

redisTemplate.delete("key1");
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/511106
推荐阅读
  

闽ICP备14008679号