一、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的更多相关文章

  1. Redis客户端——Jedis的使用

    本文介绍基于Java语言的Redis客户端——Jedis的使用,包括Jedis简介.获取Jedis.Jedis直连.Jedis连接池以及二者的对比的选择. Jedis简介 Jedis 是 Redis  ...

  2. redis 学习(8)-- redis 客户端 -- Jedis

    redis 客户端 -- Jedis 1. Jedis 直连 本质是 TCP 连接. 执行流程 创建Jedis对象 通过Jedis执行命令 返回Jedis执行结果 关闭Jedis连接 demo 要使用 ...

  3. spring 集成redis客户端jedis(java)

    spring集成jedis简单实例   jedis是redis的java客户端,spring将redis连接池作为一个bean配置. “redis.clients.jedis.JedisPool”,这 ...

  4. spring 5.x 系列第8篇 —— 整合Redis客户端 Jedis和Redisson (代码配置方式)

    文章目录 一.说明 1.1 Redis 客户端说明 1.2 Redis可视化软件 1.3 项目结构说明 1.3 依赖说明 二.spring 整合 jedis 2.1 新建基本配置文件和其映射类 2.2 ...

  5. spring 5.x 系列第7篇 —— 整合Redis客户端 Jedis和Redisson (xml配置方式)

    文章目录 一.说明 1.1 Redis 客户端说明 1.2 Redis可视化软件 1.3 项目结构说明 1.3 依赖说明 二.spring 整合 jedis 2.1 新建基本配置文件 2.2 单机配置 ...

  6. Java操作redis客户端Jedis使用

    1.1   jedis介绍 Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java.C.C#.C++.php.Node.js.Go等. 在官方网站里列一些Java的客户端,有 ...

  7. Redis 客户端 Jedis、lettuce 和 Redisson 对比

    Redis 支持多种语言的客户端,下面列举了部分 Redis 支持的客户端语言,大家可以通过官网查看 Redis 支持的客户端详情. C语言 C++ C# Java Python Node.js PH ...

  8. 深入剖析Redis客户端Jedis的特性和原理

    一.开篇 Redis作为目前通用的缓存选型,因其高性能而倍受欢迎.Redis的2.x版本仅支持单机模式,从3.0版本开始引入集群模式. Redis的Java生态的客户端当中包含Jedis.Rediss ...

  9. redis客户端jedis连接和spring结合

    摘自传智博客课程 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="htt ...

  10. Java操作redis客户端Jedis连接集群(Cluster)

    创建JedisCluster类连接redis集群. @Test public void testJedisCluster() throws Exception { //创建一连接,JedisClust ...

随机推荐

  1. 安装、部署... Windows服务 .net程序 安装 命令

    @echo offInstallutil.exe 程序目录 F:\test\TestWindows.exe 服务程序目录@sc start "服务名称"@sc config &qu ...

  2. input placeholder属性IE、360浏览器兼容性问题

    效果:http://hovertree.com/texiao/jquery/43/ 效果二:http://hovertree.com/texiao/jquery/43/1/ 请在IE中体验. 1.创建 ...

  3. ActiveReports 报表控件官方中文入门教程 (3)-如何选择页面报表和区域报表

    本篇文章将介绍区域报表和页面报表的常见使用场景.区别和选择报表类型的一些建议,两种报表的模板设计.数据源(设计时和运行时)设置.和浏览报表的区别. ActiveReports 报表控件官方中文入门教程 ...

  4. macbook 我们需要买吗

    能否写出好代码与是否使用“好”的电脑是没有直接关系的.

  5. 百度FIS入门

    1.fis作为nodejs的模块来管理的,所以首先得安装nodejs,看我前面的安装nodejs的文章. 2.官方的案例下载包https://github.com/hefangshi/fis-quic ...

  6. php学习笔记:对文件的增删查改等操作

    文件的创建: 采用touch()函数,当文件不存在会被创建 例如: <?php header("Content-type: text/html; charset=utf-8" ...

  7. 选择使用c语言编写的phalcon框架

    使用这个框架,我总结了如下几点考虑 1.这个框架速度快.纯c语言编写的框架,速度都比php框架快,省去了中间环节.当然,使用它不仅仅是性能考虑.因为如果为了解决php性能问题,完全可以有很多种方式,不 ...

  8. Python可变参数

    #!/usr/bin/env python # -*- coding: utf-8 -*- import math def calc(*numbers): sum=0 for n in numbers ...

  9. 部署时,出现用户代码未处理 System.Security.Cryptography.CryptographicException 错误解决方法

    转载:http://www.cnblogs.com/jys509/p/4499978.html 在调用RSA加密的.pfx密钥时,在本地调试没有问题,可以布署到服务器,就会报以下的错误: 用户代码未处 ...

  10. 六个创建模式之抽象工厂模式(Abstract Factory Pattern)

    问题: 使用工厂方法模式的主要问题是工厂类过多,每个产品对应一个工厂,不利于维护.因此可以考虑使用一个工厂创建一个产品族. 定义: 提供创建一些列相关或相互依赖的对象实例的接口,这些类可以称为一个产品 ...