可存储数据结构:
字符串,hash,List,set,有序set
推荐java接口:jedis
- 配置依赖:
redis.clients
jedis
2.9.0
jar
compile
基本操作
获取jedis对象进行redis操作,操作命令跟redis控制台命令一模一样:
Jedis jedis = new Jedis("localhost");
- 字符串String
jedis.set("bb", "dqwqcqcqqq");//存储
jedis.get("bb"); //取值
jedis.rename("bb", "newBB"); //修改key的值
jedis.setex("cc", 10, "woshicc"); //设置有效时间(10s)
//数值操作
jedis.set("num", "100");
jedis.incr("num");
jedis.incrBy("num", 5);
jedis.decr("num");
jedis.decrBy("num", 3);
//通过通配符返回特定前缀的key
jedis.keys("n*");
jedis.keys("*");//返回全部
//删除所有key
jedis.flushAll();
- List
//将值存储到“myList”链表中
jedis.lpush("myList", "aaa");
jedis.lpush("myList", "bbb");
jedis.lpush("myList", "ccc");
//返回该链表中指定位置的数据
jedis.lrange("myList", 0 ,2)
//将数据插入到某个数据的前面
jedis.linsert("myList", BinaryClient.LIST_POSITION.BEFORE, "bbb", "hahaha")
//插入到某数据后面
jedis.linsert("myList", BinaryClient.LIST_POSITION.AFTER, "bbb", "hehehe")
//弹出并返回链表第一个元素(栈形式,先进后出,栈顶)
jedis.lpop("myList");
//弹出并返回两个元素:当前链表名和链表最后一个元素(栈底),若为空则阻塞相应时间,若还未获取到元素则返回nil(时间若设置为0的haul则一直阻塞)
jedis.brpop(0, "myList");
//弹出并返回链表第一个元素(栈顶),其他跟brpop一样
jedis.blpop(0, "myList");
//返回链表长度
jedis.llen("myList");
- HashMap
redis可以保存HashMap对象
String mapName = "person";
//将属性保存到map对象中
jedis.hset(mapName, "name", "刘耕");
jedis.hset(mapName, "age", "29");
jedis.hset(mapName, "height", "180cm");
//取出map对象中的属性值
jedis.hget(mapName, "name");
//返回指定map对象
jedis.hgetAll(mapName)
//删除指定map中的指定属性
jedis.hdel(mapName, "height");
//判断某map是否有该属性
jedis.hexists(mapName, "name");
//取出所有key和value
jedis.hkeys(mapName);
jedis.hvals(mapName);
//防重复写入,若指定属性不存在则写入,存在则不覆盖原值
jedis.hsetnx(mapName, "school", "Chongda");
- set
redis可以保存set对象,set中的元素不可重复
//将元素添加到指定的set对象中
jedis.sadd(setName1, “1”);
jedis.sadd(setName2, “1”);
jedis.smembers(setName1); //返回整个set对象
jedis.sunion(setName1,setName2); //返回两个set的并集
jedis.sinter(setName1, setName2); //返回两个set的交集
jedis.sdiff(setName1, setName2); //返回第一个set有而第二个set没有的集合
jedis.sdiff(setName2, setName1); //返回第二个set有而第一个set没有的集合
jedis.sismember(setName1, "5"); //判断该set中是否包含指定元素
jedis.srem(setName1, "6"); //删除指定元素(可删除多个)
jedis.smove(setName1, setName2, "8"); //将set1中指定元素转移到set2
jedis.scard(setName1); //返回指定set中元素个数
jedis.srandmember(setName1, 2); //从指定set中随机取指定数目的元素出来
- 优先队列(SortedSet)
也就是有序集合,其中的元素通过指定的score值进行排序
//将指定了score的相应元素存入指定的SortedSet
jedis.zadd(rank, 10, String.format("刘耕%d", 10));
jedis.zrange(rank, 0, 9)); //按照score升序返回指定区间的元素
jedis.zcount(rank, 50, 80)); //返回指定score区间的元素个数
jedis.zscore(rank, "刘耕3")); //返回指定元素的score值
jedis.zincrby(rank, 5, "刘耕3")); //将指定元素的score值增加指定数值
jedis.zrangeByScore(rank, 0, 50)); //按照score升序返回指定score区间的元素
jedis.zrevrange(rank, 0, 9)); //按照score降序返回指定区间的元素
jedis.zrevrangeByScore(rank, 90,60); //按照score降序返回指定score区间的元素
jedis.zremrangeByRank(rank, 6, 6); //删除指定排名区间的元素
jedis.zremrangeByScore(rank, 50,80); //删除指定score区间的元素
//取出SortedSet中的元素及对应的score(即取出map中的Entry集合)
for(Tuple t:jedis.zrangeByScoreWithScores(rank, 60, 90)){
print(41, t.getElement()+" : "+t.getScore());
}
jedis.zrank(rank, "刘耕8"); //获得某个元素的排名(升序)
jedis.zrevrank(rank, "刘耕8"); //获得某个元素的排名(降序)
jedis.zinterstore(dstKey, zsetName1, zsetName2); //获取两个zset的交集,并放入dstKey这个新的zset中
//通过限定元素区间来返回指定区间的元素或元素个数
jedis.zrevrank(rank, "刘耕8");
jedis.zlexcount(rank, "[刘耕2", "[刘耕7");
jedis.zlexcount(rank, "[刘耕2", "(刘耕7");
jedis.zlexcount(rank, "-", "+"); //代表负无穷和正无穷
jedis.zrevrangeByLex(rank, "[刘耕6", "[刘耕3");
jedis.zrangeByLex(rank, "[刘耕3", "[刘耕6");
jedis.zremrangeByLex(rank, "[刘耕7", "+"); //删除指定范围的元素
jedis连接池
jedis连接池默认有8个jedis连接,如果不关闭的话,后续任务将阻塞:
JedisPool pool = new JedisPool();
for(int i = 0; i<100; i++){
Jedis j = pool.getResource();
print(49, j.get("a"));
j.close();
}