查看“Jedis 的编程实践”的源代码
←
Jedis 的编程实践
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Redis]] == 关于 == Jedis 是一个高性能的 Java 客户端,是 Redis 官方推荐的 Java 开发工具。要在 Java 开发中访问 Redis 缓存服务器,必须对 Jedis 熟悉才能编写出“漂亮”的代码。 Jedis 的项目地址:[https://github.com/alphazero/jredis https://github.com/alphazero/jredis]。 使用Jedis,可以在 Maven 的 pom 文件中,增加以下依赖: : <syntaxhighlight lang="xml" highlight=""> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${redis.version}</version> </dependency> </syntaxhighlight> Jedis 基本的使用十分简单: * 在每次使用时,构建 Jedis 对象即可。 * 一个 Jedis 对象代表一条和 Redis 服务进行连接的 Socket 通道。 * 使用完 Jedis 对象之后,需要调用 '''Jedis.close()''' 方法把连接关闭,否则会占用系统资源。 创建 Jedis 对象时,可以指定 Redis 服务的 host,port 和 password。大致的伪代码如下: : <syntaxhighlight lang="Java" highlight=""> Jedis jedis = new Jedis("localhost", 6379); // 指定Redis服务的主机和端口 jedis.auth("xxxx"); // 如果Redis服务连接需要密码,就设置密码 ... // 访问Redis服务 jedis.close(); // 使用完,就关闭连接 </syntaxhighlight> == 基础实践 == Jedis 的 String操作函数、List操作函数、Hash操作函数、Set操作函数、Zset操作函数,和 Redis 客户端的相关操作命令,基本上可以一比一的相互对应。 === Jedis 操作 String(字符串) === 示例: : <syntaxhighlight lang="Java" highlight=""> 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(); } } </syntaxhighlight> === Jedis 操作 List(列表) === 示例: : <syntaxhighlight lang="Java" highlight=""> package com.crazymakercircle.redis.jedis; //... public class ListDemo { /** * Redis列表是简单的字符串列表,按照插入顺序排序。 */ @Test public void operateList() { Jedis jedis = 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(); } } </syntaxhighlight> : 运行结果: : <syntaxhighlight lang="Java" highlight=""> [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] </syntaxhighlight> === Jedis 操作 Hash(哈希表) === 示例: : <syntaxhighlight lang="Java" highlight=""> package com.crazymakercircle.redis.jedis; //… public class HashDemo { /** * Redis hash 哈希表是一个string类型的field字段和value值的映射表, * hash特别适合用于存储对象。 * Redis 中每个hash可以存储 2^32 - 1 键-值对(40多亿) */ @Test public void operateHash() { Jedis jedis = new Jedis("localhost"); jedis.del("config"); //设置hash的 field-value对:ip=127.0.0.1 jedis.hset("config", "ip", "127.0.0.1"); //取得hash的 field关联的value值 Logger.info("jedis.hget(): " + jedis.hget("config", "ip")); //取得类型:hash Logger.info("jedis.type(): " + jedis.type("config")); //批量添加 field-value 对,参数为java map Map<String, String>configFields = new HashMap<String, String>(); configFields.put("port", "8080"); configFields.put("maxalive", "3600"); configFields.put("weight", "1.0"); //执行批量添加 jedis.hmset("config", configFields); //批量获取:取得全部 field-value 对,返回 java map映射表 Logger.info("jedis.hgetAll(): " + jedis.hgetAll("config")); //批量获取:取得部分 field对应的value,返回 java map Logger.info("jedis.hmget(): " + jedis.hmget("config", "ip", "port")); //浮点数加: 类似于String的incrByFloat jedis.hincrByFloat("config", "weight", 1.2); Logger.info("jedis.hget(weight): " + jedis.hget("config", "weight")); //获取所有的 field 字段 Logger.info("jedis.hkeys(config): " + jedis.hkeys("config")); //获取所有的 value 字段 Logger.info("jedis.hvals(config): " + jedis.hvals("config")); //获取长度 Logger.info("jedis.hlen(): " + jedis.hlen("config")); //判断field是否存在 Logger.info("jedis.hexists(weight): " + jedis.hexists("config", "weight")); //删除一个field jedis.hdel("config", "weight"); Logger.info("jedis.hexists(weight): " + jedis.hexists("config", "weight")); // 关闭连接 jedis.close(); } } </syntaxhighlight> : 运行结果: : <syntaxhighlight lang="Java" highlight=""> [main|HashDemo.operateHash] |>jedis.hget(): 127.0.0.1 [main|HashDemo.operateHash] |>jedis.type(): hash [main|HashDemo.operateHash] |>jedis.hgetAll(): {port=8080, weight=1.0, maxalive=3600, ip=127.0.0.1} [main|HashDemo.operateHash] |>jedis.hmget(): [127.0.0.1, 8080] [main|HashDemo.operateHash] |>jedis.hget(): 2.2 [main|HashDemo.operateHash] |>jedis.hkeys(): [weight, maxalive, port, ip] [main|HashDemo.operateHash] |>jedis.hvals(): [127.0.0.1, 8080, 2.2, 3600] [main|HashDemo.operateHash] |>jedis.hlen(): 4 [main|HashDemo.operateHash] |>jedis.hexists(weight): true [main|HashDemo.operateHash] |>jedis.hexists(weight): false </syntaxhighlight> === Jedis 操作 Set(集合) === 示例: : <syntaxhighlight lang="Java" highlight=""> package com.crazymakercircle.redis.jedis; //....省略import public class SetDemo { /** * Redis 的 Set集合是 String 类型的无序集合。 * 集合成员是唯一的,集合中不能出现重复的元素。 * Set集合是通过哈希表实现的,添加,删除,查找的复杂度都是 O(1)。 */ @Test public void operateSet() { Jedis jedis = new Jedis("localhost"); jedis.del("set1"); Logger.info("jedis.ping(): " + jedis.ping()); Logger.info("jedis.type(): " + jedis.type("set1")); //sadd函数: 向集合添加元素 jedis.sadd("set1", "user01", "user02", "user03"); //smembers函数: 遍历所有元素 Logger.info("jedis.smembers(): " + jedis.smembers("set1")); //scard函数: 获取集合元素个数 Logger.info("jedis.scard(): " + jedis.scard("set1")); //sismember判断是否是集合元素 Logger.info("jedis.sismember(user04): " + jedis.sismember("set1", "user04")); //srem函数:移除元素 Logger.info("jedis.srem(): " + jedis.srem("set1", "user02", "user01")); //smembers函数: 遍历所有元素 Logger.info("jedis.smembers(): " + jedis.smembers("set1")); // 关闭连接 jedis.close(); } } </syntaxhighlight> : 运行结果: : <syntaxhighlight lang="Java" highlight=""> [main|SetDemo.operateSet] |>jedis.ping(): PONG [main|SetDemo.operateSet] |>jedis.type(): none [main|SetDemo.operateSet] |>jedis.smembers(): [user02, user03, user01] [main|SetDemo.operateSet] |>jedis.scard(): 3 [main|SetDemo.operateSet] |>jedis.sismember(user04): false [main|SetDemo.operateSet] |>jedis.srem(): 2 [main|SetDemo.operateSet] |>jedis.smembers(): [user03] </syntaxhighlight> === Jedis 操作 Zset(有序集合) === 示例: : <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight> : 运行结果: : <syntaxhighlight lang="Java" highlight=""> </syntaxhighlight>
返回至“
Jedis 的编程实践
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息