“Jedis 的编程实践”的版本间差异

来自Wikioe
跳到导航 跳到搜索
第34行: 第34行:
== 基础实践 ==
== 基础实践 ==
=== Jedis 操作 String(字符串) ===
=== Jedis 操作 String(字符串) ===
Jedis 的 String 字符串操作函数和 Redis 客户端操作 String 字符串的命令,基本上可以一比一的相互对应。
Jedis 的 String 字符串操作函数和 Redis 客户端操作 String 字符串的命令,基本上可以一比一的相互对应。





2021年11月6日 (六) 06:20的版本


关于

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(字符串)

Jedis 的 String 字符串操作函数和 Redis 客户端操作 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(列表)