Java中运用Redis
Jedis
1. Jedis 是 Redis 官方首选的 Java 客户端开发包。
Jedis源码地址https://github.com/xetorthio/jedis/release
其相关jar可以从maven的中央仓库中下载:
http://central.maven.org/maven2/redis/clients/jedis/2.9.0/jedis-2.9.0.jar
2.jedis的相关jar包
在java中使用jedis中的api操作redis的时候所需jar包主要有俩个:
jedis-2.x.jar
commons-pool2-2.4.2.jar
另外需要一个junit的包进行单元测试:
junit-4.x.jar
3.Jedis对象的使用
整个过程类似之前使用Connection对象一样,一个Jedis对象就是一个数据库连接对象,这不过这个数据库是Redis(内存数据库)
1)创建Jedis对象
Jedis jedis = new Jedis();
或者:
Jedis jedis = new Jedis("127.0.0.1",6379);
或者:
Jedis jedis = new Jedis(new java.net.URI("redis://:passwd@127.0.0.1:6379/0"));
注意:这里最后一个0代表的时候index为0的数据库
如果没有密码的时候可以这样创建对象
Jedis jedis = new Jedis(new java.net.URI("redis://127.0.0.1:6379/0"));
2)使用Jedis对象
使用Jedis的API对redis进行操作,Jedis中的方法名和Redis中命令名基本上一模一样,所以只要了解Redis中命令的作用,那么Jedis中对应的方法的作用也是一样的.
3)关闭Jedis对象
每个Jedis对象在内部都会建立一个Socket和Redis服务器连接,所以Jedis对象使用完毕后可以进行关闭。
所以在使用junit进行基本的jedis操作测试的时候,可以编写如下代码:
public class RedisTest {
private Jedis jedis;
@Before
public void before(){
jedis = new Jedis();
}
@After
public void after(){
jedis.close();
}
@Test
public void test(){
//使用jedis对进行操作
}
}
意思是,在单元测试方法执行之前,junit先调用使用了@Before注解的方法,然后再调用使用了@Test注解的方法,最后再调用使用了@After注解的方法
4.Jedis对Redis中key的操作
@Test
public void test_key(){
//选择数据库 默认是0
System.out.println(jedis.select(0));
//查看当前数据库
System.out.println(jedis.getDB());
//查看当前数据库中所有key值
System.out.println(jedis.keys("*"));
//判断当前数据库中是否存在名字为name的key值
System.out.println(jedis.exists("name"));
//判断key值的在Redis中的数据类型
System.out.println(jedis.type("name"));
//查看key的过期时间 单位是毫秒 -1表示永不过期 -2表示已经过去
System.out.println(jedis.pttl("name"));
//查看key的过期时间 单位是秒 -1表示永不过期 -2表示已经过去
System.out.println(jedis.ttl("name"));
//修改key的名字 不管新名字是否被使用 如果老的key不存在会报错
System.out.println(jedis.rename("name", "username"));
//修改key的名字 新名字没有被使用的时候才生效 如果老的key不存在会报错
System.out.println(jedis.renamenx("username", "name"));
//把指定的key移动到指定的数据库中(数据库索引表示)
System.out.println(jedis.move("name",3));
//在当前数据库中随机获取一个key
System.out.println(jedis.randomKey());
//设置指定key的过期时间 单位是秒
System.out.println(jedis.expire("name", 10));
//设置指定key的过期时间 单位是毫秒
System.out.println(jedis.pexpire("name", 5000L));
//设置指定key的过期时间 时间用时间戳表示
System.out.println(jedis.expireAt("name", 1000000L));
//在指定的key过期之前,移除key上的过期时间
System.out.println(jedis.persist("name"));
//当前数据库中key的数量 返回值Long类型
jedis.dbSize();
//清空当前db
jedis.flushDB();
//清空所有db
jedis.flushAll();
}
5.Jedis对Redis中string的操作
@Test
public void test_String(){
//设置k-v的值,如果k已经则会覆盖旧值,且无视数据类型
System.out.println(jedis.set("name", "zhangsan"));
//获得指定key的值
System.out.println(jedis.get("name"));
//通过下标截取指定key的值
System.out.println(jedis.getrange("name", 0, 3));
//替换key值,并且返回旧值
System.out.println(jedis.getSet("name", "briup"));
//可以连续设置多组K-V
System.out.println(jedis.mset("name","briup","age","20"));
//获得多个key分别对应的值
System.out.println(jedis.mget("name","age"));
//设置K-V的同时设置一下过期时间,单位是秒
System.out.println(jedis.setex("password", 10, "123"));
//设置K-V的同时设置一下过期时间,单位是毫秒
System.out.println(jedis.psetex("myname", 10000L, "test"));
//设置K-V,只有指定的key没有被使用的时候才生效
System.out.println(jedis.setnx("name","tom"));
//连续设置多组K-V,只有在所有指定的key都没有被使用的时候才生效
System.out.println(jedis.msetnx("a","testA","b","testB"));
//使用第三个参数的值,从下标为3的位置开始覆盖指定key的值
System.out.println(jedis.setrange("name", 3, "aaaa"));
//返回指定key的值的长度
System.out.println(jedis.strlen("name"));
//指定的值自增1 num的值必须是整数
System.out.println(jedis.incr("num"));
//指定的值自增5 num的值必须是整数
System.out.println(jedis.incrBy("num",5));
//指定的值自减1 num的值必须是整数
System.out.println(jedis.decr("num"));
//指定的值自减5 num的值必须是整数
System.out.println(jedis.decrBy("num", 5));
//指定的值自增10.5
System.out.