redis客户端--jedis
一、jedis
jedis 是 redis推荐的java客户端。通过Jedis我们可以很方便地使用java代码的方式,对redis进行操作。jedis使用起来比较简单,它的操作方法与redis命令相类似。对于初次使用redis的人来说,上手更快,更能适应。jedis在github上的下载地址为https://github.com/xetorthio/jedis 。本例子使用maven,需要添加如下依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>
二、相关实例
以下只是对数据的一些基本操作。
获取Jedis操作对象
Jedis jedis; @Before
public void connectionTest() {
jedis = new Jedis("127.0.0.1", 6379);//redis的地址以及连接端口
6 //jedis.auth("helloworld"); //开启密码验证(配置文件中为 requirepass helloworld)的时候需要执行该方法
7 }
Jedis对key的操作
@Test
public void keyTest() throws UnsupportedEncodingException {
System.out.println(jedis.flushDB());// 清空数据
System.out.println(jedis.echo("hello")); // 判断key否存在
System.out.println(jedis.exists("foo")); jedis.set("key", "values");
jedis.set("key2", "values");
System.out.println(jedis.exists("key"));// 判断是否存在 // 如果数据库没有任何key,返回nil,否则返回数据库中一个随机的key。
String randomKey = jedis.randomKey();
System.out.println("randomKey: " + randomKey); // 设置60秒后该key过期
jedis.expire("key", 60); // key有效毫秒数
System.out.println(jedis.pttl("key")); // 移除key的过期时间
jedis.persist("key"); // 获取key的类型, "string", "list", "set". "none" none表示key不存在
System.out.println("type: " + jedis.type("key")); // 导出key的值
byte[] bytes = jedis.dump("key");
System.out.println(new String(bytes)); // 将key重命名
jedis.renamenx("key", "keytest");
System.out.println("key是否存在: " + jedis.exists("key"));// 判断是否存在
System.out.println("keytest是否存在: " + jedis.exists("keytest"));// 判断是否存在 // 查询匹配的key
// KEYS * 匹配数据库中所有 key 。
// KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
// KEYS h*llo 匹配 hllo 和 heeeeello 等。
// KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
// 特殊符号用 \ 隔开。
Set<String> set = jedis.keys("k*");
System.out.println(set); // 删除key
jedis.del("key");
System.out.println(jedis.exists("key"));
}
Jedis对字符串(String)的相关操作
@Test
public void stringTest() {
jedis.set("hello", "hello");
System.out.println(jedis.get("hello")); // 使用append 向字符串后面添加
jedis.append("hello", " world");
System.out.println(jedis.get("hello")); // set覆盖字符串
jedis.set("hello", "123");
System.out.println(jedis.get("hello")); // 设置过期时间
jedis.setex("hello2", 2, "world2");
System.out.println(jedis.get("hello2"));
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println(jedis.get("hello2")); // 一次添加多个key-value对
jedis.mset("a", "1", "b", "2");
// 获取a和b的value
List<String> valus = jedis.mget("a", "b");
System.out.println(valus); // 批量删除
jedis.del("a", "b");
System.out.println(jedis.exists("a"));
System.out.println(jedis.exists("b"));
}
Jedis对链表(Lists)的操作
@Test
public void listTest() {
String key = "mylist";
jedis.del(key); // 队列添加元素
jedis.rpush(key, "aaaa");
jedis.rpush(key, "aaaa");
jedis.rpush(key, "bbbb");
jedis.rpush(key, "cccc");
jedis.rpush(key, "cccc"); // 队列长度
System.out.println("lenth: " + jedis.llen(key)); // 打印队列,从索引0开始,到倒数第1个(全部元素)
System.out.println("all elements: " + jedis.lrange(key, 0, -1)); // 索引为1的元素
System.out.println("index of 1: " + jedis.lindex(key, 1)); // 设置队列里面一个元素的值,当index超出范围时会返回一个error。
jedis.lset(key, 1, "aa22");
System.out.println("index of 1: " + jedis.lindex(key, 1)); // 从队列的右边入队一个元素
jedis.rpush(key, "-2", "-1");// 先-2,后-1入队列
System.out.println("all elements: " + jedis.lrange(key, 0, -1)); // 从队列的左边入队一个或多个元素
jedis.lpush(key, "second element", "first element");// 先second
// element,后first
// elementF入队列
System.out.println("all elements: " + jedis.lrange(key, 0, -1)); // 从队列的右边出队一个元素
System.out.println(jedis.rpop(key));
// 从队列的左边出队一个元素
System.out.println(jedis.lpop(key));
System.out.println("all elements: " + jedis.lrange(key, 0, -1)); // count > 0: 从头往尾移除值为 value 的元素,count为移除的个数。
// count < 0: 从尾往头移除值为 value 的元素,count为移除的个数。
// count = 0: 移除所有值为 value 的元素。
jedis.lrem(key, 1, "cccc");
System.out.println("all elements: " + jedis.lrange(key, 0, -1)); // 即最右边的那个元素也会被包含在内。 如果start比list的尾部下标大的时候,会返回一个空列表。
// 如果stop比list的实际尾部大的时候,Redis会当它是最后一个元素的下标。
System.out.println(jedis.lrange(key, 0, 2));
System.out.println("all elements: " + jedis.lrange(key, 0, -1)); // 删除区间以外的元素
System.out.println(jedis.ltrim(key, 0, 2));
System.out.println("all elements: " + jedis.lrange(key, 0, -1));
}
Jedis对集合(Sets)的操作
@Test
public void testSet() {
// 清空数据
System.out.println(jedis.flushDB());
String key = "myset";
String key2 = "myset2"; // 集合添加元素
jedis.sadd(key, "aaa", "bbb", "ccc");
jedis.sadd(key2, "bbb", "ccc", "ddd"); // 获取集合里面的元素数量
System.out.println(jedis.scard(key)); // 获得两个集合的交集,并存储在一个关键的结果集
jedis.sinterstore("destination", key, key2);
System.out.println(jedis.smembers("destination")); // 获得两个集合的并集,并存储在一个关键的结果集
jedis.sunionstore("destination", key, key2);
System.out.println(jedis.smembers("destination")); // key集合中,key2集合没有的元素,并存储在一个关键的结果集
jedis.sdiffstore("destination", key, key2);
System.out.println(jedis.smembers("destination")); // 确定某个元素是一个集合的成员
System.out.println(jedis.sismember(key, "aaa")); // 从key集合里面随机获取一个元素
System.out.println(jedis.srandmember(key)); // aaa从key移动到key2集合
jedis.smove(key, key2, "aaa");
System.out.println(jedis.smembers(key));
System.out.println(jedis.smembers(key2)); // 删除并获取一个集合里面的元素
System.out.println(jedis.spop(key)); // 从集合里删除一个或多个元素
jedis.srem(key2, "ccc", "ddd");
System.out.println(jedis.smembers(key2));
}
Jedis对有序集合(Sorted Sets)的操作
@Test
public void testSortSet() {
// 清空数据
System.out.println(jedis.flushDB());
String key = "mysortset"; Map<String, Double> scoreMembers = new HashMap<String, Double>();
scoreMembers.put("aaa", 1001.0);
scoreMembers.put("bbb", 1002.0);
scoreMembers.put("ccc", 1003.0); // 添加数据
jedis.zadd(key, 1004.0, "ddd");
jedis.zadd(key, scoreMembers); // 获取一个排序的集合中的成员数量
System.out.println(jedis.zcard(key)); // 返回的成员在指定范围内的有序集合,以0表示有序集第一个成员,以1表示有序集第二个成员,以此类推。
// 负数下标,以-1表示最后一个成员,-2表示倒数第二个成员
Set<String> coll = jedis.zrange(key, 0, -1);
System.out.println(coll); // 返回的成员在指定范围内的逆序集合
coll = jedis.zrevrange(key, 0, -1);
System.out.println(coll); // 元素下标
System.out.println(jedis.zscore(key, "bbb")); // 删除元素
System.out.println(jedis.zrem(key, "aaa"));
System.out.println(jedis.zrange(key, 0, -1)); // 给定值范围内的成员数
System.out.println(jedis.zcount(key, 1002.0, 1003.0));
}
Jedis对哈希(Hashs)的操作
@Test
public void testHash() {
// 清空数据
System.out.println(jedis.flushDB());
String key = "myhash";
Map<String, String> hash = new HashMap<String, String>();
hash.put("aaa", "11");
hash.put("bbb", "22");
hash.put("ccc", "33"); // 添加数据
jedis.hmset(key, hash);
jedis.hset(key, "ddd", "44"); // 获取hash的所有元素(key值)
System.out.println(jedis.hkeys(key)); // 获取hash中所有的key对应的value值
System.out.println(jedis.hvals(key)); // 获取hash里所有元素的数量
System.out.println(jedis.hlen(key)); // 获取hash中全部的域和值,以Map<String, String> 的形式返回
Map<String, String> elements = jedis.hgetAll(key);
System.out.println(elements); // 判断给定key值是否存在于哈希集中
System.out.println(jedis.hexists(key, "bbb")); // 获取hash里面指定字段对应的值
System.out.println(jedis.hmget(key, "aaa", "bbb")); // 获取指定的值
System.out.println(jedis.hget(key, "aaa")); // 删除指定的值
System.out.println(jedis.hdel(key, "aaa"));
System.out.println(jedis.hgetAll(key)); // 为key中的域 field 的值加上增量 increment
System.out.println(jedis.hincrBy(key, "bbb", 100));
System.out.println(jedis.hgetAll(key));
}
Jedis操作事务
@Test
public void testTransaction() {
Transaction t = jedis.multi();
t.set("hello", "world");
Response<String> response = t.get("hello"); t.zadd("foo", 1, "barowitch");
t.zadd("foo", 0, "barinsky");
t.zadd("foo", 0, "barikoviev");
Response<Set<String>> sose = t.zrange("foo", 0, -1); // 返回全部相应并以有序集合的方式返回
System.out.println(response);
System.out.println(sose);
t.exec(); // 此行注意,不能缺少 String foolbar = response.get(); // Response.get() 可以从响应中获取数据 int soseSize = sose.get().size(); // sose.get() 会立即调用set方法
System.out.println(foolbar);
System.out.println(sose.get());
}
Jedis操作管道
@Test
public void testTransactionPipeling() {
Pipeline p = jedis.pipelined();//开一个管道 p.set("fool", "bar");
p.zadd("foo", 1, "barowitch");
p.zadd("foo", 0, "barinsky");
p.zadd("foo", 0, "barikoviev");
Response<String> pipeString = p.get("fool");
Response<Set<String>> sose = p.zrange("foo", 0, -1);
System.out.println(pipeString);
System.out.println(sose); p.sync();//提交 System.out.println("==========");
System.out.println(p.get("fool"));
System.out.println(p.zrange("foo", 0, -1)); int soseSize = sose.get().size();
Set<String> setBack = sose.get(); System.out.println(soseSize);
System.out.println(setBack);
}
redis客户端--jedis的更多相关文章
- Redis客户端——Jedis的使用
本文介绍基于Java语言的Redis客户端——Jedis的使用,包括Jedis简介.获取Jedis.Jedis直连.Jedis连接池以及二者的对比的选择. Jedis简介 Jedis 是 Redis ...
- redis 学习(8)-- redis 客户端 -- Jedis
redis 客户端 -- Jedis 1. Jedis 直连 本质是 TCP 连接. 执行流程 创建Jedis对象 通过Jedis执行命令 返回Jedis执行结果 关闭Jedis连接 demo 要使用 ...
- spring 集成redis客户端jedis(java)
spring集成jedis简单实例 jedis是redis的java客户端,spring将redis连接池作为一个bean配置. “redis.clients.jedis.JedisPool”,这 ...
- spring 5.x 系列第8篇 —— 整合Redis客户端 Jedis和Redisson (代码配置方式)
文章目录 一.说明 1.1 Redis 客户端说明 1.2 Redis可视化软件 1.3 项目结构说明 1.3 依赖说明 二.spring 整合 jedis 2.1 新建基本配置文件和其映射类 2.2 ...
- spring 5.x 系列第7篇 —— 整合Redis客户端 Jedis和Redisson (xml配置方式)
文章目录 一.说明 1.1 Redis 客户端说明 1.2 Redis可视化软件 1.3 项目结构说明 1.3 依赖说明 二.spring 整合 jedis 2.1 新建基本配置文件 2.2 单机配置 ...
- Java操作redis客户端Jedis使用
1.1 jedis介绍 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Java的客户端,有 ...
- Redis 客户端 Jedis、lettuce 和 Redisson 对比
Redis 支持多种语言的客户端,下面列举了部分 Redis 支持的客户端语言,大家可以通过官网查看 Redis 支持的客户端详情. C语言 C++ C# Java Python Node.js PH ...
- 深入剖析Redis客户端Jedis的特性和原理
一.开篇 Redis作为目前通用的缓存选型,因其高性能而倍受欢迎.Redis的2.x版本仅支持单机模式,从3.0版本开始引入集群模式. Redis的Java生态的客户端当中包含Jedis.Rediss ...
- redis客户端jedis连接和spring结合
摘自传智博客课程 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="htt ...
- Java操作redis客户端Jedis连接集群(Cluster)
创建JedisCluster类连接redis集群. @Test public void testJedisCluster() throws Exception { //创建一连接,JedisClust ...
随机推荐
- 11.22 点餐APP第一阶段总结
第一个冲刺结束了,任务也算是完成了. 团队合作不像单独做那样想怎么来就怎么来,各个人都不同的意见,最后方案的需要每个人一致同意通过才能执行. 不过团队合作分配到每个人的任务也相对轻一点,而且遇到问题解 ...
- ASP.NET 运行时详解 揭开请求过程神秘面纱
对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...
- 投票系统 & 简易js刷票脚本
早就听说有什么刷票脚本,微博投票等等相关的投票都有某些人去刷票. 试一下吧,兴许自己也会刷票呢?捣鼓了几个小时,终于有所眉目. (1)投票系统 要刷票,就得先有个投票界面. 当然,可以直接去各个投票网 ...
- 如何快速开发树形列表和分页查询整合的WInform程序界面
我在做Winform界面的时候,一般都是统一化处理,界面顶部放置一些字段条件供查询,下面就是分页查询列表,展示相关的数据.但有时候碰到一些表字段内容分类比较多,有一些特别重要,如果放在一个树形列表来进 ...
- 2015年最热门前端框架React 入门实例教程
现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Face ...
- 怎样计算一个整数的位数&并把每一位上的数字保存下来
用循环来解决~~ M每次除以10, 再用一个变量count来计数,每循环一次 加1,直到这个数除去10后的数小于10 ,count再加1就可以了 实例:整数M=4325, 第一次:4325/10=43 ...
- macbook装双系统多分区其实很简单,你只要把macbook当作一台普通pc就可以了!
macbook装双系统多分区其实很简单,你只要把macbook当作一台普通pc就可以了! 不用理会苹果官网的警告,苹果官网警告你只能用bootcamp安装且不能多分区,把人吓得不轻.其实不用过多担心, ...
- 【WP8.1】富文本
之前写过一篇WP8下的富文本的文章,但是写的不是很好,整理了一下,分享一下WP8.1下的富文本处理 富文本处理主要是对表情和链接的处理,一般使用RichTextBlock进行呈现 问题说明: 由于Ri ...
- 字典树(Trie树)实现与应用
一.概述 1.基本概念 字典树,又称为单词查找树,Tire数,是一种树形结构,它是一种哈希树的变种. 2.基本性质 根节点不包含字符,除根节点外的每一个子节点都包含一个字符 从根节点到某一节点.路径上 ...
- Yii路径总结
如果是 // 就会默认去调 protected/views/layouts //代表 绝对路径 其实 就是 绝对和相对的关系 /代表相对路径,如module/user下的layout 用单斜杠的话默认 ...