使用RedisTemplate缓存List的一系列操作示例
温馨提示:这篇文章已超过368天没有更新,请注意相关的内容是否还可用!
redisTemplate是Spring封装的一个比较强大的模板,方便开发时操作redis缓存。Redis缓存一般可以存储的类型有String、List、Set、Hash、Zset。// 移除指定位置的数据:接收3个参数,分别是缓存的键名,计数事件,要移除的值。计数事件可以传入的有三个值,分别是-1,0,1。该函数会将源key进行rightPop,再将返回的值,作为输入参数,在目标key上进行leftPush。// 用rightPop取出keyName1中的4,然后用LeftPush将4放置在keyName2的左边
redisTemplate是Spring封装的一个比较强大的模板,方便开发时操作redis缓存。
Redis缓存一般可以存储的类型有String、List、Set、Hash、Zset。
本文主要介绍存储List类型的相关操作
列出常用操作
首先创建两个列表,用于下面的示例操作,这样很容易理解
List<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("2");
list1.add("3");
List<String> list2 = new ArrayList<>();
list2.add("4");
list2.add("5");
list2.add("6");
对以上两个列表进行redis相关操作(常用操作)
// 往缓存数据右边存储数据
// redisTemplate.opsForList().rightPush("testKey1",list1);
redisTemplate.opsForList().rightPush("testKey2",list2);
// 获取缓存中得某区间得数据
redisTemplate.opsForList().range("testKey1", 0, 0); // 获取下标0~0的
redisTemplate.opsForList().range("testKey1", 0, 1); // 获取下标0~1的
redisTemplate.opsForList().range("testKey1", 0, -1); // 获取所有的
// 当键存在的时候,同rightPush一样存值到键下面(只有在键存在才会更新keyName下的值,如果键不存在,不会对数据进行任何操作)
redisTemplate.opsForList().rightPushIfPresent("testKey1", 1);
// 获取指定下标的元素:如果下标是-1,则返回最后一个,下标越界则返回null
redisTemplate.opsForList().index("testKey1",-1);
// 移除指定位置的数据:接收3个参数,分别是缓存的键名,计数事件,要移除的值。计数事件可以传入的有三个值,分别是-1,0,1。
// 计数事件传-1表示:从存储容器的最右边开始,删除一个与要移除的值匹配的数据;
// 计数事件传0表示:删除所有与传入值匹配的数据;
// 计数事件传1表示:从存储容器的最左边开始,删除一个与要移除的值匹配的数据
redisTemplate.opsForList().remove("testKey1",0,4);
// rightPopAndLeftPush用于操作两个键之间的数据,接受两个参数,分别是源key、目标key。该函数会将源key进行rightPop,再将返回的值,作为输入参数,在目标key上进行leftPush。
redisTemplate.opsForList().rightPushAll("testKey1",list1); // [1,2,3,4]
redisTemplate.opsForList().rightPushAll("testKey2",list2); // [1,2,3]
// 用rightPop取出keyName1中的4,然后用LeftPush将4放置在keyName2的左边
redisTemplate.opsForList().rightPopAndLeftPush("testKey1","testKey2"); // [4,1,2,3]
// 获取缓存的键的值的长度
redisTemplate.opsForList().size("testKey1");
// 判断一个键是否存在
Boolean flag = redisTemplate.hasKey("testKey2");
// 删除缓存的键的值
redisTemplate.delete("testKey1");
redisTemplate.delete("testKey2");
详细及其他操作:
1.判断key是否存在
Boolean flag = redisTemplate.hasKey("keyName")
2.获取缓存的指定区间数据
redisTemplate.opsForList().range("test", 0, 0)); // 获取缓存的List从下标0到0的值
redisTemplate.opsForList().range("test", 0, 1)); // 获取缓存的List从下标0到1的值
redisTemplate.opsForList().range("test", 0, -1)); // 获取缓存的List所有的值
3.删除缓存中的某个key
redisTemplate.delete("kayName");
4.获取密钥集的长度
redisTemplate.opsForList().size("keyName");
5. 将值存储在缓存数据的左侧
redisTemplate.opsForList().leftPush("keyName",list1);
6. 将值存储在缓存数据的右侧
redisTemplate.opsForList().rightPush("keyName",list2);
7、一次性将list数组保存到缓存左侧
redisTemplate.opsForList().leftPushAll("keyName",list);
8、一次性将list数组保存到缓存右侧
redisTemplate.opsForList().rightPushAll("keyName",list);
9、当key存在时,像rightPush一样存储key下的值(只有key存在时才会更新keyName下的值,key不存在时不会对数据进行任何操作)
redisTemplate.opsForList().rightPushIfPresent("keyName", 1);
10.当key存在时,像leftPush一样存储key下的值(只有key存在时才会更新keyName下的值,如果key不存在,不会对数据进行任何操作)
redisTemplate.opsForList().leftPushIfPresent("keyName", 1);
11、移除redis中最右边的元素(当移除keyName中的元素时,返回为空,则说明redis中不存在该key,此时如果执行leftPush或rightPush等操作,则无法再获取数据添加。)
redisTemplate.opsForList().rightPop("keyName");
12、移除redis中最左边的元素(当移除keyName中的元素时,返回为空,则说明redis中不存在该key,此时如果执行leftPush或rightPush操作,则无法再添加数据。 )
redisTemplate.opsForList().leftPop("keyName");
13、获取列表中指定位置的元素(如果下标为-1,则返回列表最后一个元素;如果下标越界,则返回null)
redisTemplate.opsForList().index("keyName",-1);
14、截取指定区间的元素(与range不同,range是获取指定区间内的数据,而trim是留下指定区间内的数据,将不在区间内的数据全部删除。trim无效,不会返回任何数据)
redisTemplate.opsForList().trim("keyName",0,2); // 获取list种下标0到2的数据,并删除其他数据
15、移除key中指定元素,接收3个参数,分别是缓存的key名称、count事件、要移除的值。 count事件可以传入三个值,分别是-1、0、1。
-1表示删除存储容器最右侧的一条与要移除的值匹配的数据;
0表示删除所有与传入值匹配的数据;
1表示从存储容器最左边删除一条与要移除的值匹配的数据。
redisTemplate.opsForList().remove("keyName",0,"keyValue");
16. rightPopAndLeftPush 该函数用于操作两个key之间的数据,接受两个参数,即源key和目标key。 该函数会对源键执行rightPop,然后使用返回值作为输入参数对目标键执行leftPush。
具体代码如下:
redisTemplate.opsForList().rightPushAll("keyName1",value1); //[1,2,3,4]
redisTemplate.opsForList().rightPushAll("keyName2",value2); //[1,2,3]
// 用rightPop取出keyName1中的4,然后用LeftPush将4放置在keyName2的左边
redisTemplate.opsForList().rightPopAndLeftPush("keyName1","keyName2"); // [4,1,2,3]
时间关系比较简洁,后面会加上各种用法执行前后的结果对比,方便理解。