前言

之前讲解了springboot(StringRedisTemplate)操作redis的string数据结构,这篇文章将会讲解list数据结构

list数据结构具有的操作

下图列出了redis list数据结构所具有的方法

StringRedisTemplate提供的方法

RedisTemplate提供的操作redis的方法列表如下:

下面,我们挑一些常用的方法作为实例讲解,其它方法,可以参考API说明即可。

range

现在redis中有一个list,其key为:happyjava:list,并且有三个值,如下:

range(K key, long start, long end)方法,是获取list指定范围的内容

start下标从零开始。如下,获取第二个到第三个的元素:

@Test
public void testList() {
List<String> list = redisTemplate.opsForList().range("happyjava:list", 1, 2);
assert list != null;
list.forEach(System.out::println);
}

输出结果:

blog.happyjava.cn

www.happyjava.cn

size(K key)

获得list的大小

@Test
public void testSize() {
Long size = redisTemplate.opsForList().size("happyjava:list");
System.out.println(size);
}

输出结果:

leftPush(K key, V value)

该方法标识从list的左边(上边,或者说list的头部)压入数据。如果不存在该key,则会创建该key。

@Test
public void testLeftPush() {
redisTemplate.opsForList().leftPush("happyjava:list", "new happyjava");
}

执行后,去查看redis中的数据:

leftPushAll

有两个重载的方法,分别为不定参数:leftPushAll(K key, V... values); ,

集合参数:leftPushAll(K key, Collection values)

不定参数:

@Test
public void testLeftPushAll() {
redisTemplate.opsForList().leftPushAll("happyjava:list","apple","happy");
}

执行之后查看数据:

集合参数:

@Test
public void testLeftPushAll() {
// redisTemplate.opsForList().leftPushAll("happyjava:list","apple","happy");
redisTemplate.opsForList().leftPushAll("happyjava:list", Arrays.asList("new happy1", "new happy2"));
}

执行之后查看数据:

rightPush(K key, V value)

从list的尾部压入数据

@Test
public void testRightPush() {
redisTemplate.opsForList().rightPush("happyjava:list","java");
}

执行之后查看redis数据:

rightPushAll

该方法与leftPushAll类是,一样有两个重载的方法,如下:

这里就不做过多的介绍了。

set(K key, long index, V value)方法

可以直接设置list中某个下标的值,index从0开始

@Test
public void testSet() {
redisTemplate.opsForList().set("happyjava:list",1,"test set");
}

执行之后查看redis

remove(K key, long count, Object value)方法

删除某个值,删除count个,从头开始删除

现在redis中的数据如下:

执行一下代码:

@Test
public void testRemove() {
redisTemplate.opsForList().remove("happyjava:list",2,"happy");
}

执行之后查看数据:

index(K key, long index)方法

返回index(从0开始)下标的元素。现在redis数据如下:

@Test
public void testIndex() {
String value = redisTemplate.opsForList().index("happyjava:list", 1);
System.out.println(value);
}

执行结果如下:

leftPop

有两个重载的方法:

V leftPop(K key);

V leftPop(K key, long timeout, TimeUnit unit);

此方法会弹出list头部的元素(弹出后就在list中删除),跟栈一样,重载的那个方法,如果list不存在数据,则会阻塞住,等有数据了就会返回(最长阻塞时间就是设置的超时时间)。该方法对应到redis的操作是BLPOP(blocking left pop)

rightPop

与leftPop类似,只是从list尾部弹出数据

总结

本文讲解了springboot操作redis的list数据结构,大部分方法都已经做了讲解和演示。list也是redis中非常常用的数据结构,以后还会继续讲解redis其它的数据结构。

【快学springboot】14.操作redis之list的更多相关文章

  1. 【快学springboot】13.操作redis之String数据结构

    前言 在之前的文章中,讲解了使用redis解决集群环境session共享的问题[快学springboot]11.整合redis实现session共享,这里已经引入了redis相关的依赖,并且通过spr ...

  2. 【快学SpringBoot】Spring Cache+Redis实现高可用缓存解决方案

    前言 之前已经写过一篇文章介绍SpringBoot整合Spring Cache,SpringBoot默认使用的是ConcurrentMapCacheManager,在实际项目中,我们需要一个高可用的. ...

  3. 【快学springboot】8.JPA乐观锁OptimisticLocking

    介绍 当涉及到企业应用程序时,正确地管理对数据库的并发访问是至关重要的.为此,我们可以使用Java Persistence API提供的乐观锁定机制.它导致在同一时间对同一数据进行多次更新不会相互干扰 ...

  4. 【快学springboot】12.实现拦截器

    前言 之前在[快学springboot]6.WebMvcConfigurer配置静态资源和解决跨域里有用到WebMvcConfigurer接口来实现静态资源的映射和解决跨域请求,并且在文末还说了Web ...

  5. 【快学springboot】4.接口参数校验

    前言 在开发接口的时候,参数校验是必不可少的.参数的类型,长度等规则,在开发初期都应该由产品经理或者技术负责人等来约定.如果不对入参做校验,很有可能会因为一些不合法的参数而导致系统出现异常. 上一篇文 ...

  6. 【快学springboot】11.整合redis实现session共享

    前言 这里都是基于前面的项目基础上的.springboot整合redis非常的方便,这也是springboot的宗旨,简化配置.这篇文章就教大家如何使用springboot整合redis来实现sess ...

  7. 【快学SpringBoot】快速上手好用方便的Spring Cache缓存框架

    前言 缓存,在开发中是非常常用的.在高并发系统中,如果没有缓存,纯靠数据库来扛,那么数据库压力会非常大,搞不好还会出现宕机的情况.本篇文章,将会带大家学习Spring Cache缓存框架. 原创声明 ...

  8. springboot 如何操作redis

    1.首先应该引入 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...

  9. springboot jpa操作redis

    SpringBoot使用Redis缓存   (1)pom.xml引入jar包,如下: <dependency> <groupId>org.springframework.boo ...

随机推荐

  1. nginx-cache

    test.conf proxy_cache_path cache levels=1:2 keys_zone=my_cache:10m; server { listen 80; server_name ...

  2. Java面向对象简单知识总结-考试用

    类.对象.构造器 类定义了属性.方法,是抽象的,写在扩展名为java的文件中. 对象是类的实体,是具体的. 构造器:方法名与类名一致.没有返回类型,可以重载不能重写.在创建对象时调用.使用new调用实 ...

  3. springAOP实现原理

    spring AOP实现原理, spring 会在初始化的时候,创建一个BeanPostProcessor(AnnotationAwareAspectJAutoProxyCreator)用来为类注入切 ...

  4. 防止重复发送Ajax请求问题

    在工作中有很多场景需要通过Ajax请求发送数据,像是注册.登录.提交用户反馈等.用户在点击了“确认”按钮之后有可能一段时间内没有收到反馈页面无任何反应,然后就接着连续多次点击“确认”按钮导致发送n个重 ...

  5. JS利用HTML5的Web Worker实现多线程

    需求:有一个长时间的斐波拉契的计算希望放在分线程中计算,计算的得到结果后再返回给主线程展示,再计算的时候不冻结页面 var number = 55;//传入分线程的参数 var worker = ne ...

  6. Catalyst3560密码破解

    1.关机:2.将设备MODE键按住,然后开机,进入switch:switch: flash_initInitializing Flash...flashfs[0]: 7 files, 2 direct ...

  7. 杭电2602 Bone Collector

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. 李彦宏AI大会现场:3秒钟事故30分钟专注

    编辑 | 于斌 出品 | 于见(mpyujian) 很多人只看到了舞台上3秒钟的事故,却没有看到李彦宏在台上30分钟的专注. 7月3号,百度AI开发者大会上,李彦宏遭遇了3秒钟的突然袭击,他表现的沉着 ...

  9. 「Luogu P5080 Tweetuzki 爱序列」

    题目大意 给出一些数,需要求出 \(\frac{a_{i+1}}{3}=a_i\) 或 \(a_{i+1}=2 \times a_i\) 时最长的序列 \(a\). 分析 可以发现符合条件的序列 \( ...

  10. Nginx+Openssl实现HTTPs(重点)

    [root@localhost ~]# rz -E                              //导入jdk源码包 z waiting to receive.**B0100000023 ...