废话不多说,上代码
package com.jjf.redis;
import org.junit.Assert;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ScanResult;
import java.util.List;
/**
* 屌丝腾讯云装了个redis
* @author jjf_lenovo
* 2017年3月12日22:13:47
*/
public class RedisKeyTest {
Jedis jedis = null;
static final String DATASOURCE_URL = "182.254.213.106";
static final int DATASOURCE_SORT = 6379;
static final String DATASOURCE_PASS = "123456";
static final int DATASOURCE_SELECT = 1;
public RedisKeyTest(){
//基本配置
jedis = new Jedis(DATASOURCE_URL,DATASOURCE_SORT);
jedis.auth(DATASOURCE_PASS);
jedis.select(DATASOURCE_SELECT);
}
@Test
public void testSetDel()
{
//set del 删除给定的一个或多个key 。
jedis.set("a","123");
jedis.set("b","123");
jedis.set("c","123");
Assert.assertTrue(jedis.del("aaa")==0);
Assert.assertTrue(jedis.del("a")==1);
Assert.assertTrue(jedis.del("b","c")==2);
}
@Test
public void testDumpRestore(){
//dump restore 序列化给定 key ,并返回被序列化的值,使用 RESTORE 命令可以将这个值反序列化为 Redis 键。
jedis.set("dump","dump","NX","EX",10);// NX/XX-覆盖set/不覆盖set EX/PX-seconds/milliseconds 10秒清除
jedis.hset("hashdump","hash","dump");
byte[] ss = jedis.dump("dump");
byte[] hashss = jedis.dump("hashdump");
System.out.println(ss.toString()+":::"+hashss);
//参数 ttl 以毫秒为单位为 key 设置生存时间;如果 ttl 为 0 ,那么不设置生存时间。
System.out.println(jedis.restore("dump-code",0,ss)+":::"+jedis.restore(hashss,10000,hashss));
System.out.println(ss.toString()+":::"+hashss);
Assert.assertTrue(jedis.get("dump-code").equals("dump"));
Assert.assertTrue(jedis.hget("hashdump","hash").equals("dump"));
Assert.assertTrue(jedis.del("dump-code")==1);
Assert.assertTrue(jedis.del("hashdump")==1);
}
@Test
public void testExistsExpireExpireat(){
//Exists Expire ExpiteAt 生存时间
jedis.set("exist","exist");
jedis.set("existAt","existAt");
Assert.assertTrue(jedis.exists("exist"));
Assert.assertTrue(jedis.expire("exist",1)==1);
// 1.这里要考虑到服务器的时间和request的时间,2.而且是秒Unix timestamp,不是毫秒
Assert.assertTrue(jedis.expireAt("existAt",System.currentTimeMillis()/1000+5)==1);
System.out.println(System.currentTimeMillis()/1000+5);
try {
Thread.sleep(5050);
} catch (InterruptedException e) {
Assert.fail("线程休眠异常");
}
System.out.println(System.currentTimeMillis()/1000);
Assert.assertTrue(!jedis.exists("exist"));
Assert.assertTrue(!jedis.exists("existAt"));
}
@Test
public void testKeys(){
//Keys 查找所有符合给定模式 pattern 的 key 。
jedis.set("ont","one","NX","EX",10);
jedis.set("two","one","NX","EX",10);
jedis.set("three","one","NX","EX",10);
jedis.set("four","one","NX","EX",10);
Assert.assertTrue(jedis.keys("*").size()==4);
Assert.assertTrue(jedis.keys("t*").size()==2);
Assert.assertTrue(jedis.keys("t??").size()==1);
Assert.assertTrue(jedis.keys("f[ab]ur").size()==0);
Assert.assertTrue(jedis.keys("f[ou]ur").size()==1);
}
@Test
public void testMigrate(){
//MIGRATE 将 key 原子性地从当前实例传送到目标实例的指定数据库上
// ,一旦传送成功,key 保证会出现在目标实例上,而当前实例上的 key 会被删除。
//云服务器内存有限,就不开两个实例了
}
@Test
public void testMove(){
//MOVE 同一个redis不同库之间的“剪切”
jedis.select(1);
jedis.set("move","123");
jedis.expire("move",5);//还是会生效
Assert.assertTrue(jedis.move("move",2)==1);
}
@Test
public void testObject(){
//OBJECT 命令允许从内部察看给定 key 的 Redis 对象。
jedis.set("object","object111111111111111111111111111111111111111111111111111111111","NX","EX",10);
String ss = jedis.get("object");
System.out.println(jedis.objectEncoding("object"));//内部表示
System.out.println(jedis.objectIdletime("object"));//自储存以来的空闲时间
System.out.println(jedis.objectRefcount("object"));//引用次数
}
@Test
public void testPersist(){
//Expire 指定时间后删除 PERSIST 移除给定 key 的生存时间
jedis.set("PERSIST","PERSIST","NX","EX",2);
jedis.persist("PERSIST");
try {
Thread.sleep(2200);
} catch (InterruptedException e) {
Assert.fail("主线程休眠异常");
}
Assert.assertTrue(jedis.get("PERSIST")!=null&&jedis.get("PERSIST").equals("PERSIST"));
Assert.assertTrue(jedis.del("PERSIST")==1);
}
@Test
public void testPexpirePexpireAt(){
//Pexpire PexpireAt 毫秒级别的expire
jedis.set("exist","exist");
jedis.set("existAt","existAt");
Assert.assertTrue(jedis.pexpire("exist",1000)==1);
// 1.这里要考虑到服务器的时间和request的时间,2.而且是秒Unix timestamp,不是毫秒
Assert.assertTrue(jedis.pexpireAt("existAt",System.currentTimeMillis()+5000)==1);
System.out.println(System.currentTimeMillis()+5000);
try {
Thread.sleep(5050);
} catch (InterruptedException e) {
Assert.fail("线程休眠异常");
}
System.out.println(System.currentTimeMillis());
Assert.assertTrue(!jedis.exists("exist"));
Assert.assertTrue(!jedis.exists("existAt"));
}
@Test
public void testPttlTtl(){
//ttl 查看生存剩余时间 pttl 毫秒级
jedis.set("ttl","ttl","NX","EX",10);
System.out.println(jedis.ttl("ttl"));
System.out.println(jedis.pttl("ttl"));
}
@Test
public void testRandomKey(){
//RANDOMKEY 从当前数据库中随机返回(不删除)一个 key 。
// System.setProperty("http.proxySet", "true");
// System.setProperty("http.proxyHost", "127.0.0.1");
// System.setProperty("http.proxyPort", "8888");
//TODO 有没有可能抓个包,判断下速度
for(int i=0;i<100;i++){
jedis.set("random"+i,String.valueOf(Math.random()),"NX","EX",10);
}
for(int i=0;i<10;i++){
System.out.println(jedis.get(jedis.randomKey()));
}
}
@Test
public void testRename(){
//rename 将 key 改名为 newkey
//renamenx 当且仅当 newkey 不存在时,将 key 改名为 newkey 。
jedis.set("one","1","NX","EX",10);
jedis.set("two","2","NX","EX",10);
Assert.assertTrue(jedis.exists("one"));
jedis.renamenx("one","three");
Assert.assertTrue(!jedis.exists("one"));
Assert.assertTrue(jedis.exists("three"));
jedis.rename("two","three"); //如果rename的新旧key都存在,那就保留旧key的值
Assert.assertTrue(!jedis.exists("two"));
Assert.assertTrue(jedis.get("three").equals("2"));
}
@Test
public void testSort(){
//sort 返回或保存给定列表、集合、有序集合 key 中经过排序的元素。
for(int i=0;i<100;i++){
jedis.lpush("sort",String.valueOf((int)(Math.random()*100)));
}
List list = jedis.sort("sort");
System.out.println("排序后:"+list.toString());
Assert.assertTrue(jedis.sort("sort","dstkey")==100);
jedis.del("sort","dstkey");
}
@Test
public void testType(){
//type 数据类型
jedis.set("a","b");
Assert.assertTrue(jedis.type("a").equals("string"));
jedis.del("a");
}
@Test
public void testScan(){
//SCAN 命令用于迭代当前数据库中的数据库键。
jedis.set("drfxgchvjbknl","fghjknlm","NX","EX",10);
ScanResult<String> result = jedis.scan(DATASOURCE_SELECT);
for(String key :result.getResult()){
System.out.println(key);
}
}
}