遇到的问题
在使用的时候,我也以为set三个参数的情况下,第三个参数是过期时间,但是默认单位是什么呢?**
四个重载方法,我们只看最后一个void set(K key, V value, long offset);
分析
springdata-redis提供的操作redis模板 redisTemplate
redisTemplate.opsForValue() 拿到ValueOperations
ValueOperations 是一个接口
ValueOperations
介绍
- 原文:Redis operations for simple (or in Redis terminology ‘string’) values.
- 翻译:Redis操作用于简单操作String类型 既 key-value 都为string类型
它的实现类是DefaultValueOperations
redisTemplate
还有几个同类型的接口,用来操作不同的redis数据类型
private final ValueOperations<K, V> valueOps = new DefaultValueOperations<>(this);
private final ListOperations<K, V> listOps = new DefaultListOperations<>(this);
private final SetOperations<K, V> setOps = new DefaultSetOperations<>(this);
private final StreamOperations<K, ?, ?> streamOps = new DefaultStreamOperations<>(this, new ObjectHashMapper());
private final ZSetOperations<K, V> zSetOps = new DefaultZSetOperations<>(this);
private final GeoOperations<K, V> geoOps = new DefaultGeoOperations<>(this);
private final HyperLogLogOperations<K, V> hllOps = new DefaultHyperLogLogOperations<>(this);
private final ClusterOperations<K, V> clusterOps = new DefaultClusterOperations<>(this);
简单看源码
在接口上提供的官网资料这个方法等同于redis操作命令中的setrange
https://redis.io/commands/setrange.
翻译一下:
package org.springframework.data.redis.core
;包下的
类ValueOperations
方法void set(K key, V value, long offset);
第一种情况:key存在的情况
如果key存在则在范围内替换,索引从1开始算起替换key的内容为value,起始偏移为offsets开始
例子
redis> SET key1 "Hello World"
"OK"
redis> SETRANGE key1 6 "Redis"
(integer) 11
redis> GET key1
"Hello Redis"
redis>
第二种情况:key不存在的情况
redis> SETRANGE key2 6 "Redis"
(integer) 11
redis> GET key2
"\u0000\u0000\u0000\u0000\u0000\u0000Redis"
redis>