广告
返回顶部
首页 > 资讯 > 精选 >redis中如何获取list中的所有元素
  • 515
分享到

redis中如何获取list中的所有元素

2023-06-14 07:06:40 515人浏览 八月长安
摘要

这篇文章主要介绍了redis中如何获取list中的所有元素,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一种方法是用 lrange( key, 0, -1 )。这种方法不会影

这篇文章主要介绍了redis中如何获取list中的所有元素,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一种方法是用 lrange( key, 0, -1 )。这种方法不会影响 Redis list 中的数据。

List<String> list = jedis.lrange( key, 0, -1 );

另一种方法是用 while + lpop 。这种方法会将 redis list 中的数据都弹出来,redis list 就变成空的了。

List<String> list = new ArrayList<>();String st = jedis.lpop( key );while ( st != null ) {  list.add( st );    st = jedis.lpop( key );}

这两种方法获得的 List<String> list 中的元素的顺序是一样的。

补充:redis列表类型list如何一次返回多个值并删除这些值

redis的列表类型list是一个常用的数据类型,但是这个类型并不支持一次性返回多个值并删除这些已经返回的值。

其实我们可以通过redis的事务,来完成这个一次性返回多个值并删除这些已经返回的值的需求。

redis中的事务就是一组命令的集合,这些命令要么全部执行,要么全都不执行。redis事务的原理就是一次性将命令都发给服务端,

当服务接收到exec命令之后,按照事务中命令的顺序依次执行事务中的命令。exec命令的返回值就是事务中依次执行的命令返回值的集合,返回值的顺序和命令的执行顺序相同。如果在发送exec命令前,客户端和服务端失去连接,这时redis会清空这个事务队列。

介绍完这些原理,我们再来看看如何完成一次性返回多个值并删除这些已经返回的值的需求。

我们这里要利用两个列表类型的命令:lrange和ltrim

lrange key start end // 从左边依次返回key的[start,end] 的所有值,注意返回结果包含两端的值。

ltrim key start end //删除指定索引之外的所有元素,注意删除之后保留的元素包含两端的start和end索引值。

我们这里举例测试

redis中如何获取list中的所有元素

我们构造了一个名为yujie_list的列表类型数据结构,从左边依次压入:0 1 2 3 4 5 6 7 8 9

最后从左到右依次列出列表中的所有元素如上图所示。

接下来我们测试lrange和ltrim命令如下图:

redis中如何获取list中的所有元素

我们使用lrange yujie_list 0 3命令,从左到右依次列出从索引0到索引3的元素,注意包含了索引0 值为9和索引3值为6的元素。

我们使用ltrim yujie_list 4 -1命令,删除索引4到最右端之外的所有元素,注意删除的元素不包含索引4职位5的元素。

好了原理讲完了,接下来我们上代码:

RedisUtil是一个工具类,用于连接redis服务端。

public final class RedisUtil {    //Redis服务器IP  private static String ADDR = "10.4.36.93";    //Redis的端口号  private static int PORT = 6379;      //可用连接实例的最大数目,默认值为8;  //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。  private static int MAX_ACTIVE = 100;    //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。  private static int MAX_IDLE = 20;    //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;  private static int MAX_WaiT = 10000;    private static int TIMEOUT = 10000;    //在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;  private static boolean TEST_ON_BORROW = true;    private static JedisPool jedisPool = null;      static {    try {      JedisPoolConfig config = new JedisPoolConfig();      config.setMaxActive(MAX_ACTIVE);      config.setMaxIdle(MAX_IDLE);      config.setMaxWait(MAX_WAIT);      config.setTestOnBorrow(TEST_ON_BORROW);      jedisPool = new JedisPool(config, ADDR, PORT);    } catch (Exception e) {      e.printStackTrace();    }  }      public synchronized static Jedis getJedis() {    try {      if (jedisPool != null) {        Jedis resource = jedisPool.getResource();        return resource;      } else {        return null;      }    } catch (Exception e) {      e.printStackTrace();      return null;    }  }      public static void returnResource(final Jedis jedis) {    if (jedis != null) {      jedisPool.returnResource(jedis);    }  }}

测试类如下:

public class RedisTest {  public static void main(String[] args) { String key = "yujie_test_list"; initList(key,9); printList(key,"原始列表数据"); List<String> listResult = getListMultValueAfterDel(key,0,3); System.out.println("一次返回并删除数据:"+listResult.toString()); printList(key,"删除之后列表数据"); }  public static void initList(String key,int maxValue){ Jedis client = RedisUtil.getJedis(); for(int i = 0;i <= maxValue; i++){  client.lpush(key, String.valueOf(i)); } System.out.println("初始化列表:"+ key + "完毕"); }  public static void printList(String key,String message){ Jedis client = RedisUtil.getJedis(); List<String> list = client.lrange(key, 0, -1); System.out.println(message+ " : " + list.toString()); }  @SuppressWarnings("unchecked") public static List<String> getListMultValueAfterDel(String key,int start, int end){ List<Object> list = null; List<String> listStr = new ArrayList<String>(); try {   Jedis jedis = RedisUtil.getJedis();  Transaction ts = jedis.multi();  ts.lrange(key, start, end);  ts.ltrim(key, end+1, -1);  list = ts.exec();  RedisUtil.returnResource(jedis); } catch (Exception e) {  // TODO: handle exception  System.out.println(e); } if(list != null && !list.isEmpty()){  try {  //获得命令lrange(key, start, end)的返回结果  listStr = (ArrayList<String>)list.get(0);   } catch (Exception e) {  // TODO: handle exception  System.out.println(e);  }   } else {  return Collections.emptyList(); } return listStr; } }

输出结果:

redis中如何获取list中的所有元素

感谢你能够认真阅读完这篇文章,希望小编分享的“redis中如何获取list中的所有元素”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: redis中如何获取list中的所有元素

本文链接: https://www.lsjlt.com/news/269183.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis中如何获取list中的所有元素
    这篇文章主要介绍了redis中如何获取list中的所有元素,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一种方法是用 lrange( key, 0, -1 )。这种方法不会影...
    99+
    2023-06-14
  • redis 获取 list 中的所有元素操作
    一种方法是用 lrange( key, 0, -1 )。这种方法不会影响 redis list 中的数据。 List<String> list = jedis.lra...
    99+
    2022-11-11
  • java如何获取list所有值
    在Java中,可以使用for循环遍历List来获取所有值。具体步骤如下:1. 定义一个List对象,例如:```javaList l...
    99+
    2023-09-20
    java
  • JAVA8 获取list集合中重复的元素和获取去重数据
    1.java8获取list集合中重复的元素 //单独String集合 List list = Arrays.asList("a","b","a","c","d","b"); List collect ...
    99+
    2023-08-23
    list java
  • Java8如何从一个list中获取某一元素集合
    目录从一个list中获取某一元素集合提取出list中bean的某一属性从一个list中获取某一元素集合 @Data public class Person { private...
    99+
    2022-11-13
  • DOM中如何获取元素
    这篇文章将为大家详细讲解有关DOM中如何获取元素,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概述DOM (Document objectModal) :文档对象模型。DOM:是浏览器提供的(浏览器特有)...
    99+
    2023-06-27
  • python随机取list中的元素
    import random a = [1, 2, 3, 4, 5, 6, 7, 8, 9] b = random.sample(a, 5) ...
    99+
    2023-01-31
    元素 python list
  • python 找出list列表中相同元素(指定元素)的所有索引
    有时需要获取列表中某一元素的所有索引,而获取列表元素索引的函数index只能返回第一个满足条件的元素的索引。 此时我们可以通过两种方式获取其所有索引: 1.将list转为array 对于array对象,可以使用如下方式获取某个元素的所有索引...
    99+
    2023-09-18
    python
  • Vue中如何获取DOM元素
    今天小编给大家分享一下Vue中如何获取DOM元素的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。dom是一种文档对象模型,同时...
    99+
    2023-07-04
  • jquery如何获取元素有几个子元素
    这篇文章主要讲解了“jquery如何获取元素有几个子元素”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“jquery如何获取元素有几个子元素”吧! ...
    99+
    2022-10-19
  • css如何获取从第n个开始之后的所有元素
    这篇文章主要介绍了css如何获取从第n个开始之后的所有元素 ,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体代码如下所示:<div id="box...
    99+
    2023-06-08
  • Go语言列表List获取元素的方式有哪些
    这篇文章主要介绍了Go语言列表List获取元素的方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言列表List获取元素的方式有哪些文章都会有所收获,下面我们一起来看看吧。Golang的列表元素的获...
    99+
    2023-06-30
  • php如何获取数组中有几个元素
    本篇内容介绍了“php如何获取数组中有几个元素”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php获取数组中有几个元素的方法:1、利用cou...
    99+
    2023-06-21
  • jquery中如何获取元素文本
    本篇内容介绍了“jquery中如何获取元素文本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • 如何在HTML中获取DOM元素
    如何在HTML中获取DOM元素?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.利用querySelectorAll()方法   返回文档中匹配指定...
    99+
    2023-06-14
  • Java8怎么从一个list中获取某一元素集合
    本篇内容介绍了“Java8怎么从一个list中获取某一元素集合”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!从一个list中获取某一元素集合...
    99+
    2023-07-02
  • java中如何获取map的所有键
    在Java中,可以使用`keySet()`方法获取Map的所有键。该方法返回一个Set集合,其中包含Map中所有的键。以下是一个示例...
    99+
    2023-08-31
    java
  • JavaScript中有哪些获取元素的方法
    这篇文章主要介绍“JavaScript中有哪些获取元素的方法”,在日常操作中,相信很多人在JavaScript中有哪些获取元素的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-19
  • JS如何获取表单中的元素和取值
    今天小编给大家分享一下JS如何获取表单中的元素和取值的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。获取表单的四种方式docu...
    99+
    2023-06-30
  • python如何从字典中获取元素
    这篇文章主要介绍python如何从字典中获取元素,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!从字典中获取元素不要用下列的方式data = {'user': 1,&nbs...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作