查看源码可以看到redisTemplate.opsForValue()中的方法都定义在ValueOperations<K, V> 中,该接口中一共有17个方法:
public interface ValueOperations<K, V> {
void set(K key, V value);
void set(K key, V value, long timeout, TimeUnit unit);
Boolean setIfAbsent(K key, V value);
void multiSet(Map<? extends K, ? extends V> map);
Boolean multiSetIfAbsent(Map<? extends K, ? extends V> map);
V get(Object key);
V getAndSet(K key, V value);
List<V> multiGet(Collection<K> keys);
Long increment(K key, long delta);
Double increment(K key, double delta);
Integer append(K key, String value);
String get(K key, long start, long end);
void set(K key, V value, long offset);
Long size(K key);
Boolean setBit(K key, long offset, boolean value);
Boolean getBit(K key, long offset);
RedisOperations<K, V> getOperations();
}
下面我们一个一个来讲解
void set(K key, V value)
方法含义:新增一个字符串类型的值,key是键,value是值
使用方法:
redisTemplate.opsForValue().set("stringkey", "stringvalue");
void set(K key, V value, l
ong timeout, TimeUnit unit)
方法含义:新增一个字符串类型的值,并且设置变量值的过期时间。key是键,value是值,timeout 过期时间,unit 过期时间单位。
unit 过期时间单位取值如下:
DAYS:天时间单元代表24小时
HOURS:小时时间单元代表60分钟
MICROSECONDS:微秒时间单元代表千分之一毫秒
MILLISECONDS:毫秒时间单元代表千分之一秒
MINUTES:分钟时间单元代表60秒
NANOSECONDS:纳秒时间单元代表千分之一微秒
SECONDS:时间单元代表1秒
使用方法,把timeoutkey对应的值设置过期时间为10秒:
redisTemplate.opsForValue().set("timeoutkey", "timeoutvalue", 10, TimeUnit.SECONDS);
Boolean setIfAbsent(K key, V value)
方法含义:如果键不存在则新增,存在则不改变已经有的值。
使用方法:
redisTemplate.opsForValue().setIfAbsent("newkey", "newvalue");
V get(Object key)
方法含义:获取key键对应的值
使用方法:
redisTemplate.opsForValue().get("stringkey");
String get(K key, long start, long end)
方法含义:截取key键对应值的字符串,从开始下标位置开始到结束下标的位置(包含结束下标)的字符串。下标从1开始,如果stringkey对应的值为value,那么下面这个方法返回为:al
使用方法:
redisTemplate.opsForValue().get("stringkey", 2, 3);
V getAndSet(K key, V value)
方法含义:获取原来key键对应的值并重新赋新值
使用方法:
redisTemplate.opsForValue().getAndSet("stringkey", "newvalue");
void set(K key, V value, long offset)
方法含义:覆盖从指定位置开始的值
使用方法:
redisTemplate.opsForValue().set("stringkey", "a", 1);
如下三个方法放在一起讲:
void multiSet(Map<? extends K, ? extends V> map)
Boolean multiSetIfAbsent(Map<? extends K, ? extends V> map)
List multiGet(Collection keys)
方法含义: multiSet:设置map集合到redis;multiSetIfAbsent:如果对应的map集合名称不存在,则添加,如果存在则不做修改;multiGet:根据集合取出对应的value值。
先使用multiSet设置相应的值,如下:
Map map = new HashMap();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
redisTemplate.opsForValue().multiSet(map);
在使用multiGet获得相应的值
List list = new ArrayList();
list.add("key1");
list.add("key2");
list.add("key3");
List<String> valueList = redisTemplate.opsForValue().multiGet(list);
for (String value2 : valueList) {
System.out.println("通过multiGet(Collection<K> keys)方法获取map值:" + value2);
}
打印结果如下:
使用multiSetIfAbsent 设置相应的值,map集合中的key与之前一样,valeu设置的不一样
Map map1 = new HashMap();
map1.put("key1", "value11");
map1.put("key2", "value22");
map1.put("key3", "value33");
List list1 = new ArrayList();
list1.add("key1");
list1.add("key2");
list1.add("key3");
redisTemplate.opsForValue().multiSetIfAbsent(map1);
List<String> valueList1 = redisTemplate.opsForValue().multiGet(list1);
for (String value1 : valueList1) {
System.out.println("通过multiGet(Collection<K> keys)方法获取map值:" + value1);
}
打印结果如下,我们可以看到没有做任何修改
使用multiSetIfAbsent 设置相应的值,map集合中的key,valeu设置的都不一样
Map map1 = new HashMap();
map1.put("key11", "value11");
map1.put("key21", "value22");
map1.put("key31", "value33");
List list1 = new ArrayList();
list1.add("key11");
list1.add("key21");
list1.add("key31");
redisTemplate.opsForValue().multiSetIfAbsent(map1);
List<String> valueList1 = redisTemplate.opsForValue().multiGet(list1);
for (String value1 : valueList1) {
System.out.println("通过multiGet(Collection<K> keys)方法获取map值:" + value1);
}
打印结果如下,我们可以看到新增了3个key:
备注说明:multiSetIfAbsent 只要map中有一个key存在,则都不做修改。
Long increment(K key, long delta)
Double increment(K key, double delta)
方法含义:以增量的方式将值存储在变量中,第二个参数为递增因子
使用方法:
redisTemplate.opsForValue().set("doublevalue", 1);
redisTemplate.opsForValue().increment("doublevalue", 1.2);//以1.2递增,递增后为2.2
redisTemplate.opsForValue().increment("doublevalue", 1);//以1递增,递增后为3.2
Integer append(K key, String value)
方法含义:在原有的值基础上新增字符串到末尾
使用方法:
redisTemplate.opsForValue().set("stringkey", "value");
redisTemplate.opsForValue().append("stringkey", "appendValue");
备注说明:如果append方法不起效果需要进行配置将 template.setValueSerializer(jackson2JsonRedisSerializer);修改为:template.setValueSerializer(new StringRedisSerializer());这个是因为序列化的原因,RedisTemplateput进去的值是序列化成二进制后的,但是append的值是直接加的。所以get的时候反序列化直接变成空值了。如果你存的值是字符串类型,建议直接使用StringRedisTemplate,这个不会序列化成二进制,append是可以用的。而且直接在redis客户端存的值也能取到
Long size(K key)
方法含义: 获取指定字符串的长度
使用方法:
Long size = redisTemplate.opsForValue().size("stringkey");
Boolean setBit(K key, long offset, boolean value)
Boolean getBit(K key, long offset)
方法含义:setBit: key键对应的值value对应的ascii码,在offset的位置(从左向右数)变为value;getBit:判断指定的位置ASCII码的bit位是否为true或者false
使用方法:
redisTemplate.opsForValue().set("stringkey", "value");
redisTemplate.opsForValue().setBit("stringkey", 1, true);
boolean flag= redisTemplate.opsForValue().getBit("stringkey", 1);
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_43842093/article/details/121527498
内容来源于网络,如有侵权,请联系作者删除!