Jedis操作Redis--List类型
/**
* List(列表)
* BLPOP,BRPOP,BRPOPLPUSH,LINDEX,LINSERT,LLEN,LPOP,LPUSH,LPUSHX,LRANGE,LREM,LSET,LTRIM, RPOP,RPOPLPUSH,RPUSH,RPUSHX
*/
public class ListTypeTest {
private Jedis jedis; private static final String KEY = "list"; private static final String VALUE = "layman"; @Before
public void setUp() {
this.jedis = new Jedis(new JedisShardInfo("192.168.133.188", 6379));
} /**
* LPUSH key value [value ...] 将一个或多个值 value 插入到列表 key 的表头
* 如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist a b c ,列表的值将是 c b a ,
* 这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。
* 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。
* <p/>
* LPUSHX key value
* 将值 value 插入到列表 key 的表头,当且仅当 key 存在并且是一个列表。
* 和 LPUSH 命令相反,当 key 不存在时, LPUSHX 命令什么也不做。
* <p/>
* RPUSH key value [value ...] 将一个或多个值 value 插入到列表 key 的表尾(最右边)。
* <p/>
* RPUSHX key value
* 将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。
* 和 RPUSH 命令相反,当 key 不存在时, RPUSHX 命令什么也不做。
*/
@Test
public void LPUSH() {
jedis.lpush(KEY, VALUE, VALUE + "1");
LRANGE();
} /**
* LPOP key
* 移除并返回列表 key 的头元素。
* <p/>
* RPOP key
* 移除并返回列表 key 的尾元素。
*/
@Test
public void LPOP() {
LRANGE();
jedis.lpop(KEY);
LRANGE();
} /**
* BLPOP key [key ...] timeout
* BLPOP 是列表的阻塞式(blocking)弹出原语。
* 它是 LPOP 命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BLPOP 命令阻塞,直到等待超时或发现可弹出元素为止。
* 当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。
* 非阻塞行为:
* 当 BLPOP 被调用时,如果给定 key 内至少有一个非空列表,那么弹出遇到的第一个非空列表的头元素,并和被弹出元素所属的列表的名字一起,组成结果返回给调用者。
* 当存在多个给定 key 时, BLPOP 按给定 key 参数排列的先后顺序,依次检查各个列表。
* 假设现在有 job 、 command 和 request 三个列表,其中 job 不存在, command 和 request 都持有非空列表。考虑以下命令:BLPOP job command request 0
* <p/>
* 超时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示阻塞时间可以无限期延长(block indefinitely) 。
* <p/>
* BRPOP key [key ...] timeout
* 它是 RPOP 命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 BRPOP 命令阻塞,直到等待超时或发现可弹出元素为止。
* BRPOP 除了弹出元素的位置和 BLPOP 不同之外,其他表现一致。
*/
@Test
public void BLPOP() throws InterruptedException {
LRANGE();
//返回的list第一个元素为返回值列表的key值,第二个元素为返回的值
List<String> blpop = jedis.blpop(5, KEY);
System.out.println(blpop);
jedis.blpop(5, KEY);
} /**
* RPOPLPUSH source destination
* 命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:
* 1,将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。
* 2,将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。
* 举个例子,你有两个列表 source 和 destination , source 列表有元素 a, b, c , destination 列表有元素 x, y, z ,
* 执行 RPOPLPUSH source destination之后,source列表包含元素a,b,destination列表包含元素 c, x, y, z,并且元素c会被返回给客户端。
* 如果 source 不存在,值 nil 被返回,并且不执行其他动作。
* 如果 source 和 destination 相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转(rotation)
* <p/>
* BRPOPLPUSH source destination timeout
* BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本,当给定列表 source 不为空时, BRPOPLPUSH 的表现和 RPOPLPUSH 一样。
* 当列表 source 为空时, BRPOPLPUSH 命令将阻塞连接,直到等待超时,或有另一个客户端对 source 执行 LPUSH 或 RPUSH 命令为止。
* 超时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示阻塞时间可以无限期延长(block indefinitely) 。
*/
@Test
public void RPOPLPUSH() {
LPUSH();
jedis.rpoplpush(KEY, KEY);
LRANGE();
} /**
* LINDEX key index
* 返回列表 key 中,下标为 index 的元素。
* 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
* 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
* 如果 key 不是列表类型,返回一个错误。
*/
@Test
public void LINDEX() {
System.out.println(jedis.lindex(KEY, 1));
} /**
* LSET key index value
* 将列表 key 下标为 index 的元素的值设置为 value 。
* 当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。
* 关于列表下标的更多信息,请参考 LINDEX 命令。
*/
@Test
public void LSET() {
LRANGE();
jedis.lset(KEY, 0, VALUE + "0");
LRANGE();
} /**
* LINSERT key BEFORE|AFTER pivot value
* 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
* 当 pivot 不存在于列表 key 时,不执行任何操作。
* 当 key 不存在时, key 被视为空列表,不执行任何操作。
* 如果 key 不是列表类型,返回一个错误。
*/
@Test
public void LINSERT() {
LRANGE();
jedis.linsert(KEY, BinaryClient.LIST_POSITION.AFTER, VALUE, "insert");
LRANGE();
} /**
* LTRIM key start stop
* 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
* 举个例子,执行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。
* 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
* 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
*/
@Test
public void LTRIM() {
LRANGE();
jedis.ltrim(KEY, 0, 1);
LRANGE();
} /**
* LREM key count value
* 根据参数 count 的值,移除列表中与参数 value 相等的元素。
* count 的值可以是以下几种:
* count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
* count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
* count = 0 : 移除表中所有与 value 相等的值。
*/
@Test
public void LREM() {
jedis.rpush(KEY, "A", "B", "A", "C", "A", "D");
LRANGE();
jedis.lrem(KEY, -2, "A");
LRANGE();
} /**
* LLEN key
* 返回列表 key 的长度。
* 如果 key 不存在,则 key 被解释为一个空列表,返回 0 .
* 如果 key 不是列表类型,返回一个错误。
*/
@Test
public void LLEN() {
System.out.println(jedis.llen(KEY));
} /**
* LRANGE key start stop
* 返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。
* 下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
* 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
*/
@Test
public void LRANGE() {
System.out.println(jedis.lrange(KEY, 0, -1));
}
}
Jedis操作Redis--List类型的更多相关文章
- Jedis操作Redis技巧详解
对于Redis的部署模式有两种,单机模式 和 集群模式.因此,本文的介绍也从这两个方面进行介绍.众所周知,Jedis是最著名的Redis java客户端操作类库,几乎支持所有的Redis操作.本文就是 ...
- Java中Jedis操作Redis与Spring的整合
Redis是一个key-value存储系统.它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集合).这些数据类型都支持push/pop. ...
- Redis入门和Java利用jedis操作redis
Redis入门和Java利用jedis操作redis Redis介绍 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库. Redis 与其他 key - val ...
- Jedis操作Redis数据库
添加Maven依赖: <dependencies> <!-- 单元测试 --> <dependency> <groupId>junit</grou ...
- Jedis操作Redis
Jedis操作Redis的常用封装方法 @Resource(name="jedispool") private JedisPool pool=null; /** * 设置缓存对象过 ...
- 四、Jedis操作Redis
前言: 原来我们操作mysql需要用的jdbc,现在操作redis则需要jedis,jedis是客户端,而redis是服务器,使用jedis客户端来操作redis. 在这里要使用jedis操作red ...
- JAVA中通过Jedis操作Redis连接与插入简单库
一.简述 JAVA中通过Jedis操作Redis连接与插入简单库 二.依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis ...
- jedis操作redis的几种常见方式总结
Redis是一个著名的key-value存储系统,也是nosql中的最常见的一种,这篇文章主要给大家总结了关于在java中jedis操作redis的几种常见方式,文中给出了详细的示例代码供大家参考学习 ...
- Spring-Boot 使用 Jedis 操作 Redis
背景: 1.Redis 之前学了个皮毛 还忘的差不多了,感觉公司项目中的Redis用的真的牛逼,so 需要深造. 2.有个同事在搞Jedis,勾起了我对知识的向往,不会用,但是很渴望. 过程: 1.改 ...
- Redis】Java中使用Jedis操作Redis(Maven导入包)、创建Redis连接池
如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动. Maven项目可以直接在pom.xml中加入jedis包驱动: <!-- https: ...
随机推荐
- 一个完整的产品设计流程——家庭安全管家
不管是产品设计,还是前后端开发,始终都应该做出来才能够有很好的提高锻炼.书看得再多,如果不配合实际练习始终得不到实质性的进展. 接下来的案例是和几位学弟学妹一起做的,契机是参加一个用户体验设计比赛,从 ...
- python语言快捷注释
1.注释单行 (1)方法1:直接在单行代码前边加 # (2)方法2:选中需要注释的代码,Ctrl+/ 即可注释 2.注释多行代码 选中想要注释的N行代码,直接Ctrl+/ 即可注释 3.取消注释多行代 ...
- 【iOS】file not found: .../Build/Products/Debug-iphonesimulator file not found
今天又遇到了这个问题: ld: file not found: /Users/***/Library/Developer/Xcode/DerivedData/***-dfscappaygvbougtb ...
- 调试过程中发现按f5无法走进jdk源码
debug 模式 ,在fis=new FileInputStream(file); 行打断点 调试过程中发现按f5无法走进jdk源码 package com.lzl.spring.test; impo ...
- Apache之——多虚拟主机多站点配置的两种实现方案
Apache中配置多主机多站点,可以通过两种方式实现: 将同一个域名的不同端口映射到不同的虚拟主机,不同端口映射到不同的站点: 将同一个端口映射成不同的域名,不同的域名映射到不同的站点. 我们只需要修 ...
- Django配置MySQL数据库
一.在settings.py中配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': ' ...
- 0R电阻在PCB布线中对布线畅通的一个小妙用
在PCB布线中,我们都会尽量节约板子空间,将元器件排布的紧密一些,难免会遇到布线不通的时候. 博主下面就来说一个关于0R电阻在PCB布线使之畅通的一个小妙用. 使用0R电阻前 假设我们这个TXD的线周 ...
- The introduction of the book American daily English notes (enlarged edition)
After reading the book of American daily English notes written by Linkun Yang[1], I think I should a ...
- spring-boot-starter-quartz集群实践
[**前情提要**]由于项目需要,需要一个定时任务集群,故此有了这个spring-boot-starter-quartz集群的实践.springboot的版本为:2.1.6.RELEASE:quart ...
- S3 Select for Java 使用记录
背景 后台基本使用 Amazon 的全家桶(EC2.DynamoDB.S3.Step Fuction 等等)构建.现在需要根据访问者的 IP 确定访问者的国家或地区. 已知: 访问者 IP 一个 ip ...