Redis 入门之 redis 列表操作
2015-12-21 10:49
627 查看
/** * @author jackson * @date 2015-12-18 下午1:51:58 * @return void */ @Test public void jedisList(){ //lpush lrange ;lpush 当key 存在但不是列表类型时,返回一个错误 返回值: 执行LPUSH 命令后,列表的长度。 先进后出 long n = jedis.lpush("jedisList", "a b c d e f".split(" ")); List<String> jedisList = jedis.lrange("jedisList", 0, 8); System.out.println("jedisList 返回列表长度: "+ n +" 列表的值: "+jedisList); n = jedis.lpush("jedisList", "a b c d e f".split(" "));// 列表允许值有重复 jedisList = jedis.lrange("jedisList", 0, 16); System.out.println("jedisList 返回列表长度: "+ n +" 列表的值: "+jedisList); //lpushx 只能push 一个值,向表头,当且仅当key 存在时,如果不存在则不做任何操作。 jedis.lpush("jedisList1","11"); jedis.lpush("jedisList1","12"); n= jedis.lpushx("jedisList1","13"); jedisList = jedis.lrange("jedisList1", 0, 20); System.out.println("jedisList 返回列表长度: "+ n +" 列表的值: "+jedisList); //lpop 移除头元素,返回头元素 String top = jedis.lpop("jedisList"); System.out.println(top); //llen返回列表key 的长度。 如果key 不存在,则key 被解释为一个空列表,返回0 . 如果key 不是列表类型,返回一个错误。 n = jedis.llen("jedisList"); System.out.println(n); n = jedis.llen("jedisList2"); System.out.println(n); // linsert 向从表头开始遇到的第一个a 前面插入 before n= jedis.linsert("jedisList", LIST_POSITION.BEFORE, "a", "before"); jedisList = jedis.lrange("jedisList", 0, 28);// [e, d, c, b, before, a, f, e, d, c, b, a] System.out.println("jedisList 返回列表长度: "+ n +" 列表的值: "+jedisList); n= jedis.linsert("jedisList", LIST_POSITION.AFTER, "a", "after");// 向从表头开始遇到的第一个a 后面插入 after jedisList = jedis.lrange("jedisList", 0, 28); System.out.println("jedisList 返回列表长度: "+ n +" 列表的值: "+jedisList);//[e, d, c, b, before, a, after, f, e, d, c, b, a] //lindex 下标从表头 记起 是从 0 开始,如果从表尾计 -1 表示最后一个元素 -2 表示倒数第二个 String jedisStr = jedis.lindex("jedisList",9); System.out.println("返回jedisList 列表中 第9 个元素:"+jedisStr); jedisStr = jedis.lindex("jedisList",-2); System.out.println("返回jedisList 列表中 第倒数第二个 个元素:"+jedisStr); //lrem 移除 指定数量(count)的 某个value count > 0 从前面遍历, count < 0 从后面遍历 count = 0 移除所有 // count > 0 jedis.lpush("jedisList3", "a b c d e f a b c d e f a b c d e f a a a d f f".split(" "));// 先进后出的原则, jedis.lrem("jedisList3", 3, "a");// 从表头开始移除 3 个 a 先进后出的原则,表头应该是最后插入的一个元素,即f List list = jedis.lrange("jedisList3", 0, 30);//返回值:[f, f, d, f, e, d, c, b, a, f, e, d, c, b, a, f, e, d, c, b, a] System.out.println("从表头开始移除 3 个 a 移除元素后返回的list: "+list); // count < 0 jedis.lpush("jedisList4", "a b c d e f a b c d e f a b c d e f a a a d f f".split(" "));// 先进后出的原则, jedis.lrem("jedisList4", -3, "a");// 从表尾开始移除 3 个 a 先进后出的原则,表尾应该是最先插入的一个元素,即a list = jedis.lrange("jedisList4", 0, 30);//返回值: System.out.println(" 从表尾开始移除 3 个 a 移除元素后返回的list: "+list);// 返回值: [f, f, d, a, a, a, f, e, d, c, b, f, e, d, c, b, f, e, d, c, b] // count = 0 jedis.lpush("jedisList5", "a b c d e f a b c d e f a b c d e f a a a d f f".split(" "));// 先进后出的原则, jedis.lrem("jedisList5", 0, "a");// 移除所有的a list = jedis.lrange("jedisList5", 0, 30); System.out.println("移除所有的a 移除元素后返回的list: "+list);// 返回值: [f, f, d, f, e, d, c, b, f, e, d, c, b, f, e, d, c, b] //lset 将key 对应的列表上原有index 位置上的index的值替换为新值 jedis.lpush("jedisList6", "a b c d e f a b c d e f a b c d e f a a a d f f".split(" ")); jedis.lset("jedisList6", 0, "lset"); list = jedis.lrange("jedisList6", 0, 30); System.out.println("在 index=0 的位置上lset 返回的list: "+list);//返回值:[lset, f, d, a, a, a, f, e, d, c, b, a, f, e, d, c, b, a, f, e, d, c, b, a] jedis.lpush("jedisList7", "a b c d e f a b c d e f a b c d e f a a a d f f".split(" ")); jedis.lset("jedisList7", -1, "lset"); list = jedis.lrange("jedisList7", 0, 30); // 注意: lrange 是前闭后闭型 System.out.println("在 index=-1 的位置上lset 返回的list: "+list);//返回值:[f, f, d, a, a, a, f, e, d, c, b, a, f, e, d, c, b, a, f, e, d, c, b, lset] // ltrim 保留最新插入的 几条记录,其余的都删除 jedis.lpush("jedisList8", "a b c d e f a b c d e f a b c d e f a a a d f f".split(" ")); jedis.ltrim("jedisList8", 0, 5);// 只保留最新插入的六条记录,其余的都删除 list = jedis.lrange("jedisList8", 0, 7); // 注意: lrange 是前闭后闭型 System.out.println(" 只保留最新插入的六条记录,其余的都删除 返回的list: "+list);//返回值:[f, f, d, a, a, a] //rpop 移除并返回列表key的尾元素 jedis.lpush("jedisList9", "a b c d e f a b c d e f a b c d e f a a a d f f".split(" ")); String rpop = jedis.rpop("jedisList9");// 移除并返回列表key的尾元素 list = jedis.lrange("jedisList9", 0, 27); // 注意: lrange 是前闭后闭型 System.out.println("移除尾元素后 返回的list: "+list+" 返回移除的尾元素:"+rpop);//返回值: [f, f, d, a, a, a, f, e, d, c, b, a, f, e, d, c, b, a, f, e, d, c, b] 返回移除的尾元素:a //rpoplpush 移除 source 中的最后元素并返回,将返回的元素插入到列表destination jedis.lpush("jedisList10", "a b c d e f".split(" ")); jedis.lpush("jedisList11", "1 2 3 4 5 6".split(" ")); jedis.rpoplpush("jedisList10", "jedisList11"); List<String> sourelist = jedis.lrange("jedisList10", 0, 27); List<String> destinationlist = jedis.lrange("jedisList11", 0, 27); System.out.println("源list 弹出尾元素后的list:"+sourelist+" 插入源list的尾元素后的List:"+destinationlist);//返回值:源list 弹出尾元素后的list:[f, e, d, c, b] 插入源list的尾元素后的List:[a, 6, 5, 4, 3, 2, 1] //如果 source 和 destination是同一个列表,那就相当于将列表逆转 jedis.lpush("jedisList12", "a b c d e f".split(" ")); jedis.rpoplpush("jedisList12", "jedisList12"); sourelist = jedis.lrange("jedisList12", 0, 27); System.out.println("同一个list执行 rpoplupsh操作后的返回的值:"+sourelist);//[a, f, e, d, c, b] 将尾元素 a 移到了 表头 //如果source 列表不存在时 不执行任何操作,也不返回错误 jedis.lpush("jedisList14", "a b c d e f".split(" ")); jedis.rpoplpush("jedisList13", "jedisList14"); sourelist = jedis.lrange("jedisList13", 0, 27); destinationlist = jedis.lrange("jedisList14", 0, 27); System.out.println("同一个list执行 rpoplupsh操作后的返回的值:"+sourelist+" "+destinationlist); //如果destinationlist 不存在 初始化 destinationlist 然后插入 sourelist 的尾元素 jedis.lpush("jedisList15", "a b c d e f".split(" ")); jedis.rpoplpush("jedisList15", "jedisList16"); sourelist = jedis.lrange("jedisList15", 0, 27); destinationlist = jedis.lrange("jedisList16", 0, 27); System.out.println("同一个list执行 rpoplupsh操作后的返回的值:"+sourelist+" "+destinationlist); //rpush 将一个或多个值插入到列表表尾 n = jedis.rpush("jedisListRpush1", "a b c d e f".split(" "));//列表存储顺序和插入顺序一致 List<String> rpushList = jedis.lrange("jedisListRpush1", 0, n); System.out.println("rpush 将一个或多个值插入到列表表尾:"+rpushList);//rpush 将一个或多个值插入到列表表尾:[a, b, c, d, e, f] //rpushx 当且仅当key存在时执行此命令 //key 存在 n = jedis.rpushx("jedisListRpush1", "rpushx"); List<String> rpushxList = jedis.lrange("jedisListRpush1", 0, n); System.out.println("rpushx 将一个值插入到列表表尾:"+rpushxList);// rpushx 将一个值插入到列表表尾:[a, b, c, d, e, f, rpushx] //key 不存在 n = jedis.rpushx("jedisListRpush2", "rpushx"); rpushxList = jedis.lrange("jedisListRpush2", 0, n); System.out.println("rpushx 将一个值插入到列表表尾:"+rpushxList);// rpushx 将一个值插入到列表表尾:[] //blpop brpop brpoplpush 这三个命令是阻塞用的 jedis.lpush("jedisList20", "a b c d e f".split(" ")); // jedis.lpush("jedisList21", "a b c d 1 1".split(" "));//按照顺序 遍历 如果 jedisList21为空 则弹出jedisList20 的头元素 List blpopList = jedis.blpop(6," jedisList21 jedisList20".split(" "));//如果jedisListRpush2 为空则线程会一致阻塞在这块直到从另一个客户端插入一个值为止 6 秒为阻塞时间,如果为0 则表示无限阻塞 System.out.println(blpopList);//返回值:[jedisList20, f] }
相关文章推荐
- redis 简单应用
- Windows下Redis的安装使用
- Redis3.0.5配置文件详解
- Redis3.0.5配置文件详解
- redis相关命令
- redis详解
- spring 使用redis集群配置
- redis(Remote Dictionary Server)
- redis的简介和使用
- Redis线程池及分布式
- 【erlang 使用】eredis 介绍
- redis研究与探索(一)-安装部署
- 大规模互联网应用Redis架构要点(转)
- 安装redis
- 如何搭建redis扩展-Yii中文网
- Spring 集成 Redis
- CentOS7下安装Redis
- Redis消息通知系统的实现
- Redis中的主从复制
- Redis中的持久化操作