Jedis 的编程实践

来自Wikioe
跳到导航 跳到搜索


关于

Jedis 是一个高性能的 Java 客户端,是 Redis 官方推荐的 Java 开发工具。要在 Java 开发中访问 Redis 缓存服务器,必须对 Jedis 熟悉才能编写出“漂亮”的代码。

Jedis 的项目地址:https://github.com/alphazero/jredis


使用Jedis,可以在 Maven 的 pom 文件中,增加以下依赖:

<dependency>
   <groupId>redis.clients</groupId>
   <artifactId>jedis</artifactId>
   <version>${redis.version}</version>
</dependency>


Jedis 基本的使用十分简单:

  • 在每次使用时,构建 Jedis 对象即可。
  • 一个 Jedis 对象代表一条和 Redis 服务进行连接的 Socket 通道。
  • 使用完 Jedis 对象之后,需要调用 Jedis.close() 方法把连接关闭,否则会占用系统资源。


创建 Jedis 对象时,可以指定 Redis 服务的 host,port 和 password。大致的伪代码如下:

Jedis jedis = new Jedis("localhost", 6379);    // 指定Redis服务的主机和端口
jedis.auth("xxxx");    // 如果Redis服务连接需要密码,就设置密码

...   // 访问Redis服务

jedis.close();    // 使用完,就关闭连接

基础实践

Jedis 的 String操作函数、List操作函数、Hash操作函数、Set操作函数、Zset操作函数,和 Redis 客户端的相关操作命令,基本上可以一比一的相互对应。

Jedis 操作 String(字符串)

示例:

package com.crazymakercircle.redis.jedis;
//...省略import
public class StringDemo {
	/**
	* Jedis字符串数据类型的相关命令
	*/
	@Test
	public void operateString() {
		Jedis jedis = new Jedis("localhost", 6379);
		//如果返回 pong 代表链接成功
		Logger.info("jedis.ping():" + jedis.ping());
		//设置key0的值为 123456
		jedis.set("key0", "123456");
		
		//返回数据类型:string
		Logger.info("jedis.type(key0): " + jedis.type("key0"));
		//取得值
		Logger.info("jedis.get(key0): " + jedis.get("key0"));
		// key是否存在
		Logger.info("jedis.exists(key0):" + jedis.exists("key0"));
		//返回key的长度
		Logger.info("jedis.strlen(key0): " + jedis.strlen("key0"));
		//返回截取字符串, 范围“0,-1”表示截取全部
		Logger.info("jedis.getrange(key0): " + jedis.getrange("key0", 0, -1));
		//返回截取字符串, 范围“1,4”表示区间[1,4]
		Logger.info("jedis.getrange(key0): " + jedis.getrange("key0", 1, 4));
		//追加字符串
		Logger.info("jedis.append(key0): " + jedis.append("key0", "appendStr"));
		Logger.info("jedis.get(key0): " + jedis.get("key0"));
		
		//重命名
		jedis.rename("key0", "key0_new");
		//判断key 是否存在
		Logger.info("jedis.exists(key0): " + jedis.exists("key0"));
		
		//批量插入
		jedis.mset("key1", "val1", "key2", "val2", "key3", "100");		
		//批量取出
		Logger.info("jedis.mget(key1,key2,key3): " + jedis.mget("key1", "key2", "key3"));
		
		//删除
		Logger.info("jedis.del(key1): " + jedis.del("key1"));
		Logger.info("jedis.exists(key1): " + jedis.exists("key1"));
		
		//取出旧值并设置新值
		Logger.info("jedis.getSet(key2): " + jedis.getSet("key2", "value3"));
		//自增1
		Logger.info("jedis.incr(key3): " + jedis.incr("key3"));
		//自增15
		Logger.info("jedis.incrBy(key3): " + jedis.incrBy("key3", 15));
		//自减1
		Logger.info("jedis.decr(key3): " + jedis.decr("key3"));
		//自减15
		Logger.info("jedis.decrBy(key3): " + jedis.decrBy("key3", 15));
		//浮点数加
		Logger.info("jedis.incrByFloat(key3): " + jedis.incrByFloat("key3", 1.1));
		
		//返回0 只有在key不存在的时候才设置
		Logger.info("jedis.setnx(key3): " + jedis.setnx("key3", "existVal"));
		Logger.info("jedis.get(key3): " + jedis.get("key3"));// 3.1
		
		//只有key都不存在的时候才设置,这里返回 null
		Logger.info("jedis.msetnx(key2,key3): " + jedis.msetnx("key2", "exists1", "key3", "exists2"));
		Logger.info("jedis.mget(key2,key3): " + jedis.mget("key2", "key3"));
		
		//设置key,2 秒后失效
		jedis.setex("key4", 2, "2 seconds is no Val");
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		// 2 seconds is no Val
		Logger.info("jedis.get(key4): " + jedis.get("key4"));
		
		jedis.set("key6", "123456789");
		//第三位之后,用新值覆盖旧值(下标从0开始)
		jedis.setrange("key6", 3, "abcdefg");
		//返回:123abcdefg
		Logger.info("jedis.get(key6): " + jedis.get("key6"));
		
		//返回所有匹配的key
		Logger.info("jedis.get(key*): " + jedis.keys("key*")); 
		
		// 关闭连接
		jedis.close();
	}
}

Jedis 操作 List(列表)

示例:

package com.crazymakercircle.redis.jedis;
//...
public class ListDemo {
	/**
	* Redis列表是简单的字符串列表,按照插入顺序排序。
	*/
	@Test
	public void operateList() {
		Jedisjedis = new Jedis("localhost");
		Logger.info("jedis.ping(): " +jedis.ping());
		
		jedis.del("list1");
		//从list列表尾部添加3个元素
		jedis.rpush("list1", "zhangsan", "lisi", "wangwu");
		
		//取得类型:list
		Logger.info("jedis.type(): " +jedis.type("list1"));
		
		//遍历区间[0,-1],取得全部的元素
		Logger.info("jedis.lrange(0,-1): " +jedis.lrange("list1", 0, -1));
		//遍历区间[1,2],取得区间的元素
		Logger.info("jedis.lrange(1,2): " +jedis.lrange("list1", 1, 2));
		
		//获取list列表的长度
		Logger.info("jedis.llen(list1): " +jedis.llen("list1"));
		//获取下标为 1 的元素
		Logger.info("jedis.lindex(list1,1): " +jedis.lindex("list1", 1));
		//左侧弹出元素
		Logger.info("jedis.lpop(): " +jedis.lpop("list1"));
		//右侧弹出元素
		Logger.info("jedis.rpop(): " +jedis.rpop("list1"));
		//设置下标为0的元素val
		jedis.lset("list1", 0, "lisi2");
		//最后,遍历区间[0,-1],取得全部的元素
		Logger.info("jedis.lrange(0,-1): " +jedis.lrange("list1", 0, -1));
		
		// 关闭连接
		jedis.close();
	}
}
运行结果:
[main|ListDemo.operateList] |>jedis.ping(): PONG
[main|ListDemo.operateList] |>jedis.type(): list
[main|ListDemo.operateList] |>jedis.lrange(0,-1): [zhangsan, lisi, wangwu]
[main|ListDemo.operateList] |>jedis.lrange(1,2): [lisi, wangwu]
[main|ListDemo.operateList] |>jedis.llen(list1): 3
[main|ListDemo.operateList] |>jedis.lindex(list1,1): lisi
[main|ListDemo.operateList] |>jedis.lpop(): zhangsan
[main|ListDemo.operateList] |>jedis.rpop(): wangwu
[main|ListDemo.operateList] |>jedis.lrange(0,-1): [lisi2]

Jedis 操作 Hash(哈希表)

示例:

运行结果:

Jedis 操作 Set(集合)

示例:

运行结果:

Jedis 操作 Zset(有序集合)

示例:

运行结果: