前言
SpringBoot项目通过StringRedisTemplate操作Redis
引入依赖
pom.xml
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
|
获取对象
1 2
| @Autowired private StringRedisTemplate stringRedisTemplate;
|
新增数据
<key>
:键
<value>
:值
1
| stringRedisTemplate.opsForValue().set("<key>", "<value>");
|
覆盖新值
<new_value>
:新值
1
| String old_value = stringRedisTemplate.opsForValue().getAndSet("<key>", "<new_value>");
|
指定过期时间
<num>
:指定过期时间,单位由第四个参数决定
TimeUnit.SECONDS
:以秒为单位
1
| stringRedisTemplate.opsForValue().set("<key>", "<value>", <num>, TimeUnit.SECONDS);
|
不存在时新增数据
- 如果键不存在则插入键值对;如果键存在则中止插入数据
- 返回是否插入成功的布尔值
1
| boolean result = stringRedisTemplate.opsForValue().setIfAbsent("<key>", "<value>");
|
批量插入数据
覆盖批量插入数据
- 如果已经存在键,则直接覆盖,并继续完成所有数据的插入
1 2
| Map<Sring, String> map = new HashMap<>(); stringRedisTemplate.opsForValue().multiSet(map);
|
不覆盖批量插入数据
- 如果已经存在键,则中止插入,并回滚所有数据的插入
- 返回是否插入成功的布尔值
1 2
| Map<Sring, String> map = new HashMap<>(); boolean result = stringRedisTemplate.opsForValue().multiSetIfAbsent(map);
|
删除数据
1
| boolean result = stringRedisTemplate.opsForValue().getOperations().delete("<key>");
|
批量删除
1 2
| List<String> keys = new ArrayList<>(); long results = stringRedisTemplate.opsForValue().getOperations().delete(Arrays.asList("test1", "test2"));
|
查询数据
<key>
:通过键获取值
1
| stringRedisTemplate.opsForValue().get("<key>");
|
批量查询数据
1 2
| List<String> keys = new ArrayList<>(); List<String> values = stringRedisTemplate.opsForValue().multiGet(keys);
|
处理其它数据类型的值
处理字符串类型的值
获取字符串长度
1
| long size = stringRedisTemplate.opsForValue().size("<key>");
|
向字符串末尾追加子串
<str>
:子串
1
| Integer append = stringRedisTemplate.opsForValue().append("<key>", "<str>");
|
处理数值型的值
- 如果没有指定键,则立即通过指定键创建键值对,值默认为0
- 如果指定键对应的值为非数值,则报错
对数值自增1
1
| stringRedisTemplate.opsForValue().increment("<key>");
|
对数值自减1
1
| stringRedisTemplate.opsForValue().decrement("<key>");
|
处理集合型的值
获取集合的长度
1
| long size = stringRedisTemplate.opsForList().size("<key>");
|
从集合中获取值
获取指定下标的值
<index>
:指定下标
1
| String value = stringRedisTemplate.opsForList().index("<key>", <index>);
|
获取指定下标区间的值
<index_start>
:开始位置下标
<index_end>
:结束位置下标
1
| List<String> list = stringRedisTemplate.opsForList().range("<key>", <index_start>, <index_stop>);
|
在集合中追加数据
<str>
:追加的集合子元素
在指定下标位置追加数据
- 如果指定下标位置没有数据,则添加数据
- 如果指定下标位置有数据,则覆盖数据
- 如果下标超出,则报错
<index>
:下标位置
<str>
:追加的数据
1
| stringRedisTemplate.opsForList().set("<key>", <index>, "<str>");
|
在集合头部追加数据
1
| long size = stringRedisTemplate.opsForList().leftPush("<key>", "<str>");
|
批量追加
1
| long size = stringRedisTemplate.opsForList().leftPushAll("<key>", "<str_1>", "<str_2>");
|
只有当集合存在时才追加
1
| long size = stringRedisTemplate.opsForList().leftPushIfPresent("<key>", "<str>");
|
在集合尾部追加数据
1
| long size = stringRedisTemplate.opsForList().rightPush("<key>", "<str>");
|
批量追加
1
| long size = stringRedisTemplate.opsForList().rightPushAll("<key>", "<str_1>", "<str_2>");
|
只有当集合存在时才追加
1
| long size = stringRedisTemplate.opsForList().rightPushIfPresent("<key>", "<str>");
|
从集合中移除数据
- 移除后返回被移除的数据
- 如果移除后集合为空,则直接删除键值对
从集合头部移除数据
1
| String result = stringRedisTemplate.opsForList().leftPop("<key>");
|
指定等待时间
- 指定等待时间,在等待时间内如果出现数据则移除数据,如果没出现数据则无操作
1
| String result = stringRedisTemplate.opsForList().leftPop("<key>", <num>, TimeUnit.SECONDS);
|
从集合尾部移除数据
1
| String result = stringRedisTemplate.opsForList().rightPop("<key>");
|
指定等待时间
- 指定等待时间,在等待时间内如果出现数据则移除数据,如果没出现数据则无操作
1
| String result = stringRedisTemplate.opsForList().rightPop("<key>", <num>, TimeUnit.SECONDS);
|
移除指定的值
<str>
:用于作对比的字符串
<num>
:如果出现多个相同的值,指定移除哪个
>0
:移除从左到右数,第<num>
次出现相同的值
<0
:移除从右到左数,第<num>
次出现相同的值
=0
:移除所有出现相同的值
1
| long size = stringRedisTemplate.opsForList().remove("<key>", <num>, "<str>");
|
转移数据
- 从集合尾部移除并追加在另一个集合头部
- 返回这个被转移的数据
1
| String result = stringRedisTemplate.opsForList().rightPopAndLeftPush("<str_1>", "<str_2>");
|
截取指定长度的集合
- 根据指定的下标截取集合的长度,多出来的数据将被移除
<index_start>
:开始位置下标
<index_end>
:结束位置下标
1
| stringRedisTemplate.opsForList().trim("<key>", <index_start>, <index_end>);
|
处理键值对型的值
新增键值对
1
| stringRedisTemplate.opsForHash().put("<key>","<value_k>","<value_v>");
|
1 2 3 4
| Map<String, String> map = new HashMap<>(); map.put("<value_k_1>", "value_v_1"); map.put("<value_k_2>", "value_v_2"); stringRedisTemplate.opsForHash().putAll("<key>", map);
|
不覆盖新增
- 如果键存在,则新增不存在的键值对
- 如果键不存在,则创建新的键值对
- 返回是否成功新增
1
| boolean result = stringRedisTemplate.opsForHash().putIfAbsent("<key>","<value_k>","<value_v>");
|
获取键值对
1
| Map<String, Map<String, String>> result = stringRedisTemplate.opsForHash().entries("<key>");
|
获取键值对的值
1
| String result = stringRedisTemplate.opsForHash().get("<key>", "<value_k>");
|
获取键值对的键
1
| Set<String> keys = stringRedisTemplate.opsForHash().keys("<key>");
|
获取键值对长度
1
| long size = stringRedisTemplate.opsForHash().size("<key>");
|
将键值对的键自增
<step>
:自增的步长
1
| long size = stringRedisTemplate.opsForHash().increment("<key>", "<key-k>", <step>);
|
批量获取指定键的值
1
| List<String> values = stringRedisTemplate.opsForHash().multiGet("<key>", Arrays.asList("<key_k_1>", "<key_k_2>"));
|
根据指定键批量删除键值对
1
| long result = stringRedisTemplate.opsForHash().delete("<key>", "<key_k_1>", "<key_k_2>");
|
完成
参考文献
CSDN——阿靖哦