Jedis属于Java连接Redis的一种客户端。其操作方式跟原生的redis客户端命令类似。关于redis操作的基本命令可以参考这个文档:http://www.runoob.com/redis/redis-tutorial.html

注:关于redis单节点以及redis集群的安装可以参考我之前的这两篇文章:

(1)Jedis操作字符串:

Java
package cn.zifangsky.test.redis;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
/**
* @author zifangsky
*
*/
public class BaseTest {
private Jedis jedis;
@Before
public void init(){
jedis = new Jedis("192.168.1.30", 6379);
jedis.auth("admin");
}
/**
* jedis操作字符串
*/
@Test
public void testString(){
jedis.set("test", "123"); //设置一个值
System.out.println(jedis.get("test")); //获取值
jedis.append("test", "-456"); //字符串拼接
System.out.println(jedis.get("test"));
jedis.del("test"); //删除某个键
System.out.println(jedis.get("test"));
//一次设置多个值
jedis.mset("username","zifangsky","password","123456","age","0");
System.out.println(jedis.get("username") + "-" + jedis.get("password") + "-" + jedis.get("age"));
}
}
46packagecn.zifangsky.test.redis;
importjava.util.HashMap;
importjava.util.Map;
importorg.junit.Before;
importorg.junit.Test;
importredis.clients.jedis.Jedis;
/**
* @author zifangsky
*
*/
publicclassBaseTest{
privateJedisjedis;
@Before
publicvoidinit(){
jedis=newJedis("192.168.1.30",6379);
jedis.auth("admin");
}
/**
* jedis操作字符串
*/
@Test
publicvoidtestString(){
jedis.set("test","123");//设置一个值
System.out.println(jedis.get("test"));//获取值
jedis.append("test","-456");//字符串拼接
System.out.println(jedis.get("test"));
jedis.del("test");//删除某个键
System.out.println(jedis.get("test"));
//一次设置多个值
jedis.mset("username","zifangsky","password","123456","age","0");
System.out.println(jedis.get("username")+"-"+jedis.get("password")+"-"+jedis.get("age"));
}
}
运行这个单元测试之后输出如下:
123
123-456
null
zifangsky-123456-0

1

2

3

4123

123-456

null
zifangsky-123456-0
(2)Jedis操作List:
Java
/**
* jedis操作List
*/
@Test
public void testList(){
jedis.del("books");
/**
* LPUSH key value1 [value2] 将一个或多个值插入到列表头部
* LPUSHX key value 将一个或多个值插入到已存在的列表头部
*/
jedis.lpush("books", "book1");
jedis.lpush("books", "book2");
jedis.lpush("books", "book3");
// 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
//System.out.println(jedis.lrange("books", 0, -1));
System.out.println(jedis.lrange("books", 0, jedis.llen("books")));
//RPUSH key value1 [value2] 在列表中添加一个或多个值
jedis.del("books");
jedis.rpush("books", "book1");
jedis.rpush("books", "book2");
jedis.rpush("books", "book3");
System.out.println(jedis.lrange("books", 0, -1));
}
/**
* jedis操作List
*/
@Test
publicvoidtestList(){
jedis.del("books");
/**
*     LPUSH key value1 [value2] 将一个或多个值插入到列表头部
*  LPUSHX key value 将一个或多个值插入到已存在的列表头部
*/
jedis.lpush("books","book1");
jedis.lpush("books","book2");
jedis.lpush("books","book3");
// 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
//        System.out.println(jedis.lrange("books", 0, -1));
System.out.println(jedis.lrange("books",0,jedis.llen("books")));
//RPUSH key value1 [value2] 在列表中添加一个或多个值
jedis.del("books");
jedis.rpush("books","book1");
jedis.rpush("books","book2");
jedis.rpush("books","book3");
System.out.println(jedis.lrange("books",0,-1));
}
运行这个单元测试之后输出如下:
[book3, book2, book1]
[book1, book2, book3]
1
2[book3,book2,book1]
[book1,book2,book3]
(3)Jedis操作Set:
Java
/**
* jedis操作Set
*/
@Test
public void testSet(){
jedis.del("users");
jedis.sadd("users", "user1");
jedis.sadd("users", "user2");
jedis.sadd("users", "user3");
jedis.sadd("users", "user4");
jedis.srem("users", "user4"); //移除指定元素
System.out.println(jedis.scard("users")); //返回集合中元素个数
System.out.println(jedis.srandmember("users")); //返回一个随机元素
System.out.println(jedis.smembers("users")); //返回所有元素
System.out.println(jedis.sismember("users", "user4")); //判断user4是否是集合中的一个元素
}


20/**
* jedis操作Set
*/
@Test
publicvoidtestSet(){
jedis.del("users");
jedis.sadd("users","user1");
jedis.sadd("users","user2");
jedis.sadd("users","user3");
jedis.sadd("users","user4");
jedis.srem("users","user4");//移除指定元素
System.out.println(jedis.scard("users"));//返回集合中元素个数
System.out.println(jedis.srandmember("users"));//返回一个随机元素
System.out.println(jedis.smembers("users"));//返回所有元素
System.out.println(jedis.sismember("users","user4"));//判断user4是否是集合中的一个元素
}
运行这个单元测试之后输出如下:
3
user2
[user1, user3, user2]
false
1
2
3
43
user2
[user1,user3,user2]
false
(4)Jedis操作Map:
Java
/**
* jedis操作Map
*/
@Test
public void testMap(){
Map students = new HashMap<>();
students.put("stuA", "a1");
students.put("stuB", "b2");
students.put("stuC", "c3");
students.put("stuD", "4d");
jedis.hmset("students", students); //存储
jedis.hdel("students", "stuD"); //删除某个值
System.out.println(jedis.hlen("students")); //获取Map集合大小
System.out.println(jedis.exists("stuD")); //时候存在某个键的记录
System.out.println(jedis.hkeys("students")); //返回Map集合的所有key
System.out.println(jedis.hvals("students")); //返回Map集合的所有value
}


18

19

20/**
* jedis操作Map
*/
@Test
publicvoidtestMap(){
Mapstudents=newHashMap<>();
students.put("stuA","a1");
students.put("stuB","b2");
students.put("stuC","c3");
students.put("stuD","4d");
jedis.hmset("students",students);//存储
jedis.hdel("students","stuD");//删除某个值
System.out.println(jedis.hlen("students"));//获取Map集合大小
System.out.println(jedis.exists("stuD"));//时候存在某个键的记录
System.out.println(jedis.hkeys("students"));//返回Map集合的所有key
System.out.println(jedis.hvals("students"));//返回Map集合的所有value
}
运行这个单元测试之后输出如下:
3
false
[stuB, stuC, stuA]
[a1, c3, b2]
1
2
3
43
false
[stuB,stuC,stuA]
[a1,c3,b2]
(5)Jedis连接池的基本使用:
i)创建一个获取连接的公共类:
Java
package cn.zifangsky.test.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class RedisUtil {
/**
* Redis所在服务器IP
*/
private static String ADDR = "192.168.1.30";
/**
* Redis的端口号
*/
private static int PORT = 6379;
/**
* 认证密码
*/
private static String AUTH = "admin";
/**
* 设置一个pool可分配多少个jedis实例,默认值是8
* 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)
*/
private static int MAX_ACTIVE = 1024;
/**
* 设置一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8
*/
private static int MAX_IDLE = 20;
/**
* 设置等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。
* 如果超过等待时间,则直接抛出JedisConnectionException
*/
private static int MAX_WAIT = 1000 * 100;
/**
* 连接超时时间,单位毫秒
*/
private static int TIMEOUT = 1000 * 10;
/**
* 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的
*/
private static boolean TEST_ON_BORROW = true;
private static JedisPool jedisPool = null;
/**
* 初始化Redis连接池
*/
static{
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(MAX_ACTIVE);
config.setMaxIdle(MAX_IDLE);
config.setMaxWaitMillis(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);
}
public synchronized static Jedis getJedis(){
if(jedisPool != null){
Jedis jedis = jedisPool.getResource();
return jedis;
}else{
return null;
}
}
}


75

76packagecn.zifangsky.test.redis;
importredis.clients.jedis.Jedis;
importredis.clients.jedis.JedisPool;
importredis.clients.jedis.JedisPoolConfig;
publicclassRedisUtil{
/**
* Redis所在服务器IP
*/
privatestaticStringADDR="192.168.1.30";
/**
* Redis的端口号
*/
privatestaticintPORT=6379;
/**
* 认证密码
*/
privatestaticStringAUTH="admin";
/**
* 设置一个pool可分配多少个jedis实例,默认值是8
* 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)
*/
privatestaticintMAX_ACTIVE=1024;
/**
* 设置一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8
*/
privatestaticintMAX_IDLE=20;
/**
* 设置等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。
* 如果超过等待时间,则直接抛出JedisConnectionException
*/
privatestaticintMAX_WAIT=1000*100;
/**
* 连接超时时间,单位毫秒
*/
privatestaticintTIMEOUT=1000*10;
/**
* 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的
*/
privatestaticbooleanTEST_ON_BORROW=true;
privatestaticJedisPooljedisPool=null;
/**
* 初始化Redis连接池
*/
static{
JedisPoolConfigconfig=newJedisPoolConfig();
config.setMaxTotal(MAX_ACTIVE);
config.setMaxIdle(MAX_IDLE);
config.setMaxWaitMillis(MAX_WAIT);
config.setTestOnBorrow(TEST_ON_BORROW);
jedisPool=newJedisPool(config,ADDR,PORT,TIMEOUT,AUTH);
}
publicsynchronizedstaticJedisgetJedis(){
if(jedisPool!=null){
Jedisjedis=jedisPool.getResource();
returnjedis;
}else{
returnnull;
}
}
}
ii)测试:
Java
/**
* 测试连接池的基本使用
*/
@Test
public void testRedisPool(){
Jedis jedis = RedisUtil.getJedis();
jedis.set("testRedisPool","测试Redis连接池");
System.out.println(jedis.get("testRedisPool"));
}


9/**
* 测试连接池的基本使用
*/
@Test
publicvoidtestRedisPool(){
Jedisjedis=RedisUtil.getJedis();
jedis.set("testRedisPool","测试Redis连接池");
System.out.println(jedis.get("testRedisPool"));
}

运行这个单元测试之后输出如下:

测试Redis连接池

1测试Redis连接池

参考: