服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Redis - RedisTemplate常用操作方法总结(set、hash、list、string等)

RedisTemplate常用操作方法总结(set、hash、list、string等)

2022-10-17 15:16..Silence.. Redis

本文主要介绍了RedisTemplate常用操作方法总结,主要包括了6种常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Redis常用的数据类型:

  • String
  • Hash
  • List
  • Set
  • zSet
  • Sorted set

String类型

保存和读取String(最常用的)

?
1
2
3
4
5
6
7
8
9
10
System.out.println("缓存正在设置。。。。。。。。。"); 
redisTemplate.opsForValue().set("key1","value1"); 
redisTemplate.opsForValue().set("key2","value2"); 
redisTemplate.opsForValue().set("key3","value3"); 
redisTemplate.opsForValue().set("key4","value4"); 
System.out.println("缓存已经设置完毕。。。。。。。"); 
String result1=redisTemplate.opsForValue().get("key1").toString(); 
String result2=redisTemplate.opsForValue().get("key2").toString(); 
String result3=redisTemplate.opsForValue().get("key3").toString(); 
System.out.println("缓存结果为:result:"+result1+"  "+result2+"   "+result3);

判断是否有key所对应的值,有则返回true,没有则返回false

?
1
redisTemplate.hasKey(key)

有则取出key值所对应的值

?
1
redisTemplate.opsForValue().get(key)

删除单个key值

?
1
redisTemplate.delete(key)

批量删除key

?
1
redisTemplate.delete(keys) //其中keys:Collection<K> keys

将当前传入的key值序列化为byte[]类型

?
1
redisTemplate.dump(key)

设置过期时间

?
1
2
3
4
5
6
public Boolean expire(String key, long timeout, TimeUnit unit) {
    return redisTemplate.expire(key, timeout, unit);
 }
 public Boolean expireAt(String key, Date date) {
    return redisTemplate.expireAt(key, date);
  }

查找匹配的key值,返回一个Set集合类型

?
1
2
3
public Set<String> getPatternKey(String pattern) {
    return redisTemplate.keys(pattern);
}

修改redis中key的名称

?
1
2
3
public void renameKey(String oldKey, String newKey) {
    redisTemplate.rename(oldKey, newKey);
}

返回传入key所存储的值的类型

?
1
2
3
public DataType getKeyType(String key) {
    return redisTemplate.type(key);
}

如果旧值存在时,将旧值改为新值

?
1
2
3
public Boolean renameOldKeyIfAbsent(String oldKey, String newKey) {
    return redisTemplate.renameIfAbsent(oldKey, newKey);
}

从redis中随机取出一个key

?
1
redisTemplate.randomKey()

返回当前key所对应的剩余过期时间

?
1
2
3
public Long getExpire(String key) {
    return redisTemplate.getExpire(key);
}

返回剩余过期时间并且指定时间单位

?
1
2
3
public Long getExpire(String key, TimeUnit unit) {
    return redisTemplate.getExpire(key, unit);
}

将key持久化保存

?
1
2
3
public Boolean persistKey(String key) {
    return redisTemplate.persist(key);
}

将当前数据库的key移动到指定redis中数据库当中

?
1
2
3
public Boolean moveToDbIndex(String key, int dbIndex) {
    return redisTemplate.move(key, dbIndex);
}

设置当前的key以及value值

?
1
redisTemplate.opsForValue().set(key, value)

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

?
1
redisTemplate.opsForValue().set(key, value, timeout, unit)

返回key中字符串的子字符

?
1
2
3
public String getCharacterRange(String key, long start, long end) {
    return redisTemplate.opsForValue().get(key, start, end);
}

将旧的key设置为value,并且返回旧的key

?
1
2
3
public String setKeyAsValue(String key, String value) {
    return redisTemplate.opsForValue().getAndSet(key, value);
}

批量获取值

?
1
2
3
public List<String> multiGet(Collection<String> keys) {
   return redisTemplate.opsForValue().multiGet(keys);
}

在原有的值基础上新增字符串到末尾

?
1
redisTemplate.opsForValue().append(key, value)

以增量的方式将double值存储在变量中

?
1
2
3
public Double incrByDouble(String key, double increment) {
   return redisTemplate.opsForValue().increment(key, increment);
}

通过increment(K key, long delta)方法以增量方式存储long值(正值则自增,负值则自减)

?
1
2
3
public Long incrBy(String key, long increment) {
    return redisTemplate.opsForValue().increment(key, increment);
}

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

?
1
2
3
4
5
Map valueMap = new HashMap(); 
valueMap.put("valueMap1","map1"); 
valueMap.put("valueMap2","map2"); 
valueMap.put("valueMap3","map3"); 
redisTemplate.opsForValue().multiSetIfAbsent(valueMap);

设置map集合到redis

?
1
2
3
4
5
Map valueMap = new HashMap(); 
valueMap.put("valueMap1","map1"); 
valueMap.put("valueMap2","map2"); 
valueMap.put("valueMap3","map3"); 
redisTemplate.opsForValue().multiSet(valueMap);

获取字符串的长度

?
1
redisTemplate.opsForValue().size(key)

用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始

?
1
redisTemplate.opsForValue().set(key, value, offset)

重新设置key对应的值,如果存在返回false,否则返回true

?
1
redisTemplate.opsForValue().setIfAbsent(key, value)

将值 value 关联到 key,并将 key 的过期时间设为 timeout

?
1
redisTemplate.opsForValue().set(key, value, timeout, unit)

将二进制第offset位值变为value

?
1
redisTemplate.opsForValue().setBit(key, offset, value)

对key所储存的字符串值,获取指定偏移量上的位(bit)

?
1
redisTemplate.opsForValue().getBit(key, offset)

Hash类型

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。

Hash结构,保存和读取map:

示例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Map<String,String> map=new HashMap<String,String>(); 
map.put("key1","value1"); 
map.put("key2","value2"); 
map.put("key3","value3"); 
map.put("key4","value4"); 
map.put("key5","value5"); 
redisTemplate.opsForHash().putAll("map1",map); 
Map<String,String> resultMap= redisTemplate.opsForHash().entries("map1"); 
List<String>reslutMapList=redisTemplate.opsForHash().values("map1"); 
Set<String>resultMapSet=redisTemplate.opsForHash().keys("map1"); 
String value=(String)redisTemplate.opsForHash().get("map1","key1"); 
System.out.println("value:"+value); 
System.out.println("resultMapSet:"+resultMapSet); 
System.out.println("resultMap:"+resultMap); 
System.out.println("resulreslutMapListtMap:"+reslutMapList);

运行结果为:

value:value1  

resultMapSet:[key1, key2, key5, key3, key4]  

resultMap:{key3=value3, key2=value2, key1=value1, key5=value5, key4=value4}  

resulreslutMapListtMap:[value1, value2, value5, value3, value4]  

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

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

获取变量中的键值对

?
1
2
3
public Map<Object, Object> hGetAll(String key) {
    return redisTemplate.opsForHash().entries(key);
}

新增hashMap值

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

以map集合的形式添加键值对

?
1
2
3
public void hPutAll(String key, Map<String, String> maps) {
    redisTemplate.opsForHash().putAll(key, maps);
}

仅当hashKey不存在时才设置

?
1
2
3
public Boolean hashPutIfAbsent(String key, String hashKey, String value) {
    return redisTemplate.opsForHash().putIfAbsent(key, hashKey, value);
}

删除一个或者多个hash表字段

?
1
2
3
public Long hashDelete(String key, Object... fields) {
    return redisTemplate.opsForHash().delete(key, fields);
}

查看hash表中指定字段是否存在

?
1
2
3
public boolean hashExists(String key, String field) {
    return redisTemplate.opsForHash().hasKey(key, field);
}

给哈希表key中的指定字段的整数值加上增量increment

?
1
2
3
4
5
6
public Long hashIncrBy(String key, Object field, long increment) {
    return redisTemplate.opsForHash().increment(key, field, increment);
}
 public Double hIncrByDouble(String key, Object field, double delta) {
    return redisTemplate.opsForHash().increment(key, field, delta);
}

获取所有hash表中字段

?
1
redisTemplate.opsForHash().keys(key)

获取hash表中字段的数量

?
1
redisTemplate.opsForHash().size(key)

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

?
1
2
3
public List<Object> hValues(String key) {
    return redisTemplate.opsForHash().values(key);
}

匹配获取键值对,ScanOptions.NONE为获取全部键对

?
1
2
3
public Cursor<Entry<Object, Object>> hashScan(String key, ScanOptions options) {
    return redisTemplate.opsForHash().scan(key, options);
}

List类型

保存和读取list

示例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
List<String> list1=new ArrayList<String>(); 
 list1.add("a1"); 
list1.add("a2"); 
 list1.add("a3"); 
 
 List<String> list2=new ArrayList<String>(); 
  list2.add("b1"); 
 list2.add("b2"); 
 list2.add("b3"); 
redisTemplate.opsForList().leftPush("listkey1",list1); 
redisTemplate.opsForList().rightPush("listkey2",list2); 
List<String> resultList1=(List<String>)redisTemplate.opsForList().leftPop("listkey1"); 
 List<String> resultList2=(List<String>)redisTemplate.opsForList().rightPop("listkey2"); 
System.out.println("resultList1:"+resultList1); 
System.out.println("resultList2:"+resultList2); 

运行结果:

resultList1:[a1, a2, a3]  

resultList2:[b1, b2, b3]

这里需要解释一下:不管是leftPush还是rightPush都可以用leftPop或者rightPoP任意一种获取到其中的值,不过就是获取的遍历方向不一样。有学过数据结构的人都知道里面循环链表是可以前后遍历的,就和这里的场景是一样的。如果还有不懂的话可以去看看这部分的源代码,其实就是遍历方向不同,所以效率也不同。所以最好leftPush用leftPoP遍历,rightPush用rightPoP遍历

通过索引获取列表中的元素

?
1
redisTemplate.opsForList().index(key, index)

获取列表指定范围内的元素(start开始位置, 0是开始位置,end 结束位置, -1返回所有)

?
1
redisTemplate.opsForList().range(key, start, end)

存储在list的头部,即添加一个就把它放在最前面的索引处

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

把多个值存入List中(value可以是多个值,也可以是一个Collection value)

?
1
redisTemplate.opsForList().leftPushAll(key, value)

List存在的时候再加入

?
1
redisTemplate.opsForList().leftPushIfPresent(key, value)

如果pivot处值存在则在pivot前面添加

?
1
redisTemplate.opsForList().leftPush(key, pivot, value)

按照先进先出的顺序来添加(value可以是多个值,或者是Collection var2)

?
1
2
redisTemplate.opsForList().rightPush(key, value)
redisTemplate.opsForList().rightPushAll(key, value)

在pivot元素的右边添加值

?
1
redisTemplate.opsForList().rightPush(key, pivot, value)

设置指定索引处元素的值

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

移除并获取列表中第一个元素(如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止)

?
1
2
redisTemplate.opsForList().leftPop(key)
redisTemplate.opsForList().leftPop(key, timeout, unit)

移除并获取列表最后一个元素

?
1
2
redisTemplate.opsForList().rightPop(key)
redisTemplate.opsForList().rightPop(key, timeout, unit)

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

?
1
2
redisTemplate.opsForList().rightPopAndLeftPush(sourceKey, destinationKey)
redisTemplate.opsForList().rightPopAndLeftPush(sourceKey, destinationKey, timeout, unit)

删除集合中值等于value的元素(index=0, 删除所有值等于value的元素; index>0, 从头部开始删除第一个值等于value的元素; index<0, 从尾部开始删除第一个值等于value的元素)

?
1
redisTemplate.opsForList().remove(key, index, value)

将List列表进行剪裁

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

获取当前key的List列表长度

?
1
redisTemplate.opsForList().size(key)

Set类型

保存和读取Set:

代码示例:

?
1
2
3
4
5
6
SetOperations<String, String> set = redisTemplate.opsForSet();
        set.add("set1","22"); 
        set.add("set1","33"); 
        set.add("set1","44"); 
        Set<String> resultSet =redisTemplate.opsForSet().members("set1"); 
        System.out.println("resultSet:"+resultSet);

运行结果为:

resultSet:[[set3, set2, set1]]  jedis

添加元素

?
1
redisTemplate.opsForSet().add(key, values)

移除元素(单个值、多个值)

?
1
redisTemplate.opsForSet().remove(key, values)

删除并且返回一个随机的元素

?
1
redisTemplate.opsForSet().pop(key)

获取集合的大小

?
1
redisTemplate.opsForSet().size(key)

判断集合是否包含value

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

获取两个集合的交集(key对应的无序集合与otherKey对应的无序集合求交集)

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

获取多个集合的交集(Collection var2)

?
1
redisTemplate.opsForSet().intersect(key, otherKeys)

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

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

key集合与多个集合的交集存储到destKey无序集合中

?
1
redisTemplate.opsForSet().intersectAndStore(key, otherKeys, destKey)

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

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

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

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

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

?
1
redisTemplate.opsForSet().difference(key, otherKeys)

差集存储到destKey中(otherKeys可以为单个值或者集合)

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

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

?
1
redisTemplate.opsForSet().randomMember(key)

获取集合中的所有元素

?
1
redisTemplate.opsForSet().members(key)

随机获取集合中count个元素

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

获取多个key无序集合中的元素(去重),count表示个数

?
1
redisTemplate.opsForSet().distinctRandomMembers(key, count)

遍历set类似于Interator(ScanOptions.NONE为显示所有的)

?
1
redisTemplate.opsForSet().scan(key, options)

zSet类型

ZSetOperations提供了一系列方法对有序集合进行操作 添加元素(有序集合是按照元素的score值由小到大进行排列)

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

删除对应的value,value可以为多个值

?
1
redisTemplate.opsForZSet().remove(key, values)

增加元素的score值,并返回增加后的值

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

返回元素在集合的排名,有序集合是按照元素的score值由小到大排列

?
1
redisTemplate.opsForZSet().rank(key, value)

返回元素在集合的排名,按元素的score值由大到小排列

?
1
redisTemplate.opsForZSet().reverseRank(key, value)

获取集合中给定区间的元素(start 开始位置,end 结束位置, -1查询所有)

?
1
redisTemplate.opsForZSet().reverseRangeWithScores(key, start,end)

按照Score值查询集合中的元素,结果从小到大排序

?
1
2
3
redisTemplate.opsForZSet().reverseRangeByScore(key, min, max)
redisTemplate.opsForZSet().reverseRangeByScoreWithScores(key, min, max)
//返回值为:Set<ZSetOperations.TypedTuple<V>>

从高到低的排序集中获取分数在最小和最大值之间的元素

?
1
redisTemplate.opsForZSet().reverseRangeByScore(key, min, max, start, end)

根据score值获取集合元素数量

?
1
redisTemplate.opsForZSet().count(key, min, max)

获取集合的大小

?
1
2
redisTemplate.opsForZSet().size(key)
redisTemplate.opsForZSet().zCard(key)

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

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

移除指定索引位置处的成员

?
1
redisTemplate.opsForZSet().removeRange(key, start, end)

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

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

获取key和otherKey的并集并存储在destKey中(其中otherKeys可以为单个字符串或者字符串集合)

?
1
redisTemplate.opsForZSet().unionAndStore(key, otherKey, destKey)

获取key和otherKey的交集并存储在destKey中(其中otherKeys可以为单个字符串或者字符串集合)

?
1
redisTemplate.opsForZSet().intersectAndStore(key, otherKey, destKey)

遍历集合(和iterator一模一样)

?
1
2
3
4
5
Cursor<TypedTuple<Object>> scan = opsForZSet.scan("test3", ScanOptions.NONE);
        while (scan.hasNext()){
            ZSetOperations.TypedTuple<Object> item = scan.next();
            System.out.println(item.getValue() + ":" + item.getScore());
        }

到此这篇关于RedisTemplate常用操作方法总结(set、hash、list、string等)的文章就介绍到这了,更多相关RedisTemplate常用操作内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_44761056/article/details/124172630

延伸 · 阅读

精彩推荐
  • RedisSpringMVC集成redis配置的多种实现方法

    SpringMVC集成redis配置的多种实现方法

    这篇文章主要介绍了SpringMVC集成redis配置的多种实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考...

    Abdulaziz_Dev3822021-07-29
  • RedisRedis集群增加节点与删除节点的方法详解

    Redis集群增加节点与删除节点的方法详解

    这篇文章主要给大家介绍了关于Redis集群增加节点与删除节点的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Redis具有一定的参考学习...

    全me村的希望2532019-11-27
  • RedisRedis 不使用 keys 命令获取键值信息的方法

    Redis 不使用 keys 命令获取键值信息的方法

    这篇文章主要介绍了Redis 不使用 keys 命令获取键值信息的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧 ...

    JenningLang3842019-11-15
  • RedisRedis数组和链表深入详解

    Redis数组和链表深入详解

    这篇文章主要介绍了Redis数组和链表深入详解,这是redis的基础的知识点,有感兴趣的同学可以学习下...

    Tsing7072021-07-27
  • RedisRedis IP地址的绑定的实现

    Redis IP地址的绑定的实现

    这篇文章主要介绍了Redis IP地址的绑定的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    hua_hs4642021-08-02
  • Redis解析Redis Cluster原理

    解析Redis Cluster原理

    redis最开始使用主从模式做集群,若master宕机需要手动配置slave转为master;后来为了高可用提出来哨兵模式,该模式下有一个哨兵监视master和slave,若master宕...

    detectiveHLH11252021-08-11
  • Redis浅谈Redis在分布式系统中的协调性运用

    浅谈Redis在分布式系统中的协调性运用

    这篇文章主要介绍了Redis在分布式系统中的协调性运用,讲解了Redis在进程和线程的调度上以及消息队列中的作用,需要的朋友可以参考下 ...

    柏树_Jeff2892019-10-27
  • Redis2021年最新Redis面试题汇总(4)

    2021年最新Redis面试题汇总(4)

    在程序员面试过程中redis相关的知识是常被问到的话题。这篇文章主要介绍了几道Redis面试题,整理一下分享给大家,感兴趣的小伙伴们可以参考一下...

    java李杨勇7122021-10-11