使用RedisTemplate缓存List的一系列操作示例

2023-08-11 1971阅读

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"); 

使用RedisTemplate缓存List的一系列操作示例

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等操作,则无法再获取数据添加。)

怎样往list添加数据_向list添加内容_ads中往list中添加数据

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]

时间关系比较简洁,后面会加上各种用法执行前后的结果对比,方便理解。

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]