目录
1、方案选择:
(1)官网推荐客户端:
在redis官网中对于java客户端也提供了不少的client,但是本文使用的是官方推荐的jedis,这个jedis简单轻便,并且支持redis-cluster集群,支持2.x、3.x以及更高版本的redis。
(2)Spring集成客户端:
在项目开发中,一般情况下都会用到spring来管理应用,本文也是如此,spring 本身也提供了对redis的集成支持spring-data-redis,不过目前好像spring的主干版本不能很好的支持redis-cluster集群。
2、官网单机客户端:
(1)引入jar包:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
(2)创建单机客户端:
//单机客户端
public static Jedis getRedisClient(){
Jedis jedis = new Jedis("192.168.1.141",6378);//指定redis单机IP、port
return jedis;
}
3、官网redis-cluster客户端:
(1)引入jar包:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
(2)创建redis-cluster客户端:
//集群客户端
public static JedisCluster getRedisClusterClient(){
Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
//指定redis-cluster集群中所有节点IP和端口号,就会高可用连接redis-cluster
jedisClusterNodes.add(new HostAndPort("192.168.1.141", 6379));
jedisClusterNodes.add(new HostAndPort("192.168.1.141", 6380));
jedisClusterNodes.add(new HostAndPort("192.168.1.141", 6381));
jedisClusterNodes.add(new HostAndPort("192.168.1.142", 6379));
jedisClusterNodes.add(new HostAndPort("192.168.1.142", 6380));
jedisClusterNodes.add(new HostAndPort("192.168.1.142", 6381));
jedisClusterNodes.add(new HostAndPort("192.168.1.143", 6379));
jedisClusterNodes.add(new HostAndPort("192.168.1.143", 6380));
jedisClusterNodes.add(new HostAndPort("192.168.1.143", 6381));
JedisCluster jedisCluster = new JedisCluster(jedisClusterNodes);
return jedisCluster;
}
4、官网客户端操作redis:
(1)操作key:
A、单机客户端操作:
//单机操作
public static void standAloneOperate(){
Jedis jedis = RedisClient.getRedisClient();//获取redis单机客户端
//清空数据
jedis.flushDB();
//判断key是否存在
jedis.set("lsy_one","001");
Boolean resultBoolean = jedis.exists("lsy_one");
System.out.println("key是否存在:"+resultBoolean);
jedis.set("lsy_two","002");
//循环所有key
Set<String> keys = jedis.keys("*");
Iterator<String> it=keys.iterator() ;
while(it.hasNext()){
String key = it.next();
System.out.println(key+":"+jedis.get(key));
}
//修改某个key
jedis.rename("lsy_two","lsy_Two");
System.out.println("key修改后获取值:"+jedis.get("lsy_Two"));
//删除某个key
jedis.del("lsy_Two");
System.out.println("key删除后获取值:"+jedis.get("lsy_Two"));
//设置key过期时间:
jedis.set("lsy_three","003");
jedis.expire("lsy_three",10);
//查看某个key生成时间:
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Long seconds = jedis.ttl("lsy_three");
System.out.println("key剩余生存时间:"+seconds);
//移出某个key生存时间:
jedis.persist("lsy_three");
System.out.println("key移出生存时间后获取值:"+jedis.ttl("lsy_three"));
//查看某个key所存储值类型:
String type = jedis.type("lsy_one");
System.out.println("key获取value值类型:"+type);
}
B、redis-cluster客户端操作:
//集群操作
public static void clusterOperate(){
JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取redis集群客户端
//判断key是否存在
jedisCluster.set("lsy_one","001");
Boolean resultBoolean = jedisCluster.exists("lsy_one");
System.out.println("key是否存在:"+resultBoolean);
jedisCluster.set("lsy_two","002");
//循环所有key
TreeSet<String> keys = new TreeSet<String>();
Map<String, JedisPool> clusterNodes = jedisCluster.getClusterNodes();//获取集群所有节点
for (String key : clusterNodes.keySet()) {
JedisPool jedisPool = clusterNodes.get(key);
Jedis jedisConn = jedisPool.getResource();
try {
keys.addAll(jedisConn.keys("*"));//获取集群每个节点执行keys,然后结果添加到TreeSet中
} catch (Exception e) {
} finally {
jedisConn.close();
}
}
Iterator<String> iterator = keys.iterator();
while(iterator.hasNext()){
String key = iterator.next();
System.out.println(key+":"+jedisCluster.get(key));
}
//删除某个key
jedisCluster.del("lsy_Two");
System.out.println("key删除后获取值:"+jedisCluster.get("lsy_Two"));
//设置key过期时间:
jedisCluster.set("lsy_three","003");
jedisCluster.expire("lsy_three",10);
//查看某个key生成时间:
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("key剩余生存时间:"+jedisCluster.ttl("lsy_three"));
//移出某个key生存时间:
jedisCluster.persist("lsy_three");
System.out.println("key移出生存时间后获取值:"+jedisCluster.ttl("lsy_three"));
//查看某个key所存储值类型:
System.out.println("key获取value值类型:"+jedisCluster.type("lsy_one"));
}
(2)操作string:
A、单机客户端操作:
//单机操作
public static void standAloneOperate(){
Jedis jedis = RedisClient.getRedisClient();//获取单机客户端
//清空数据
jedis.flushDB();
//增加一个string
jedis.set("lsy_one","100");
System.out.println("增加string结果:"+jedis.get("lsy_one"));
//修改某个string
jedis.set("lsy_one","111");
System.out.println("修改string结果:"+jedis.get("lsy_one"));
//追加某个string的值
jedis.append("lsy_one","222");
System.out.println("追加string结果:"+jedis.get("lsy_one"));
//查看某个string
String resultStr = jedis.get("lsy_one");
System.out.println("查看string结果:"+resultStr);
//删除某个string
jedis.del("lsy_one");
System.out.println("删除string结果:"+jedis.get("lsy_one"));
//增加多个string
jedis.mset("lsy_one","010","lsy_two","011","lsy_three","012");
System.out.println("增加多个string结果:"+jedis.mget("lsy_one","lsy_two","lsy_three"));
//查看多个string
List<String> resultStrList = jedis.mget("lsy_one","lsy_two","lsy_three");
for(int i = 0; i < resultStrList.size(); i++){
System.out.println("查看多个string结果:"+resultStrList.get(i));
}
//删除多个string
jedis.del(new String[]{"lsy_one","lsy_two","lsy_three"});
System.out.println("删除多个string结果:"+jedis.mget("lsy_one","lsy_two","lsy_three"));
}
B、redis-cluster客户端操作:
//集群操作
public static void clusterOperate(){
JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取集群客户端
//增加一个string
jedisCluster.set("lsy_one","1001");
System.out.println("增加string结果:"+jedisCluster.get("lsy_one"));
//修改某个string
jedisCluster.set("lsy_one","1111");
System.out.println("修改string结果:"+jedisCluster.get("lsy_one"));
//追加某个string的值
jedisCluster.append("lsy_one","0000");
System.out.println("追加string结果:"+jedisCluster.get("lsy_one"));
//查看某个string
String resultStr = jedisCluster.get("lsy_one");
System.out.println("查看string结果:"+resultStr);
//删除某个string
jedisCluster.del("lsy_one");
System.out.println("删除string结果:"+jedisCluster.get("lsy_one"));
}
(3)操作list:
A、单机客户端操作:
public static void standAloneOperate(){
Jedis jedis = RedisClient.getRedisClient();//获取单机客户端
//清空数据
jedis.flushDB();
//增加一个list,注意下标是从最后插入的数据开始计算的,从0开始加。
jedis.lpush("lsy_list","001");
jedis.lpush("lsy_list","002");
jedis.lpush("lsy_list","003");
jedis.lpush("lsy_list","004");
jedis.lpush("lsy_list","005");
jedis.lpush("lsy_list","004");
System.out.println("增加list结果:"+jedis.lrange("lsy_list",0,-1));
//修改list制定下标的值
jedis.lset("lsy_list",1,"222");
System.out.println("修改指定下标list结果:"+jedis.lrange("lsy_list",0,-1));
//删除list指定的值
jedis.lrem("lsy_list",1,"004");//如果重复就删除指定的个数
System.out.println("删除指定值list结果:"+jedis.lrange("lsy_list",0,-1));
//删除list下标以外区间的值
jedis.ltrim("lsy_list",1,3);
System.out.println("删除区间外list结果:"+jedis.lrange("lsy_list",0,-1));
//某个list元素出栈
jedis.lpop("lsy_list");
System.out.println("元素出栈list结果:"+jedis.lrange("lsy_list",0,-1));
//查看list长度
Long length = jedis.llen("lsy_list");
System.out.println("列表长度list结果:"+length);
//查看list某个下标值
List<String> resultStrList = jedis.lrange("lsy_list",0,0);
for(int i = 0; i < resultStrList.size(); i++){
System.out.println("某个元素list结果:"+resultStrList.get(i));
}
//查看list某几个元素值
List<String> resultList = jedis.lrange("lsy_list",0,1);
for(int i = 0; i < resultList.size(); i++){
System.out.println("某几个元素list结果:"+resultList.get(i));
}
//查看list所有元素值
List<String> list = jedis.lrange("lsy_list",0,-1);
for(int i = 0; i < list.size(); i++){
System.out.println("所有元素list结果:"+list.get(i));
}
//排序list,list中存字符串时必须指定参数为alpha,如果不使用SortingParams,而是直接使用sort("list")
SortingParams sortingParameters = new SortingParams();
sortingParameters.alpha();
sortingParameters.desc();//降序
List<String> sortList = jedis.sort("lsy_list",sortingParameters);
for(int i = 0; i < sortList.size(); i++){
System.out.println("排序list结果:"+sortList.get(i));
}
}
B、redis-cluster客户端操作:
public static void clusterOperate(){
JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取集群客户端
//增加一个list,注意下标是从最后插入的数据开始计算的,从0开始加。
jedisCluster.lpush("lsy_list","001");
jedisCluster.lpush("lsy_list","002");
jedisCluster.lpush("lsy_list","003");
jedisCluster.lpush("lsy_list","004");
jedisCluster.lpush("lsy_list","005");
jedisCluster.lpush("lsy_list","004");
System.out.println("增加list结果:"+jedisCluster.lrange("lsy_list",0,-1));
//修改list制定下标的值
jedisCluster.lset("lsy_list",1,"222");
System.out.println("修改指定下标list结果:"+jedisCluster.lrange("lsy_list",0,-1));
//删除list指定的值
jedisCluster.lrem("lsy_list",1,"004");
System.out.println("删除指定值list结果:"+jedisCluster.lrange("lsy_list",0,-1));
//删除list下标以外区间的值
jedisCluster.ltrim("lsy_list",1,3);
System.out.println("删除区间外list结果:"+jedisCluster.lrange("lsy_list",0,-1));
//某个list元素出栈
jedisCluster.lpop("lsy_list");
System.out.println("元素出栈list结果:"+jedisCluster.lrange("lsy_list",0,-1));
//查看list长度
Long length = jedisCluster.llen("lsy_list");
System.out.println("列表长度list结果:"+length);
//查看list某个下标值
List<String> resultStrList = jedisCluster.lrange("lsy_list",0,0);
for(int i = 0; i < resultStrList.size(); i++){
System.out.println("某个元素list结果:"+resultStrList.get(i));
}
//查看list某几个元素值
List<String> resultList = jedisCluster.lrange("lsy_list",0,1);
for(int i = 0; i < resultList.size(); i++){
System.out.println("某几个元素list结果:"+resultList.get(i));
}
//查看list所有元素值
List<String> list = jedisCluster.lrange("lsy_list",0,-1);
for(int i = 0; i < list.size(); i++){
System.out.println("所有元素list结果:"+list.get(i));
}
//排序list,list中存字符串时必须指定参数为alpha,如果不使用SortingParams,而是直接使用sort("list")
SortingParams sortingParameters = new SortingParams();
sortingParameters.alpha();
sortingParameters.asc();//升序
List<String> sortList = jedisCluster.sort("lsy_list",sortingParameters);
for(int i = 0; i < sortList.size(); i++){
System.out.println("排序list结果:"+sortList.get(i));
}
}
(4)操作set:
A、单机客户端操作:
public static void standAloneOperate(){
Jedis jedis = RedisClient.getRedisClient();//获取单机客户端
//清空数据
jedis.flushDB();
//增加一个set
jedis.sadd("lsy_set","111");
jedis.sadd("lsy_set","222");
jedis.sadd("lsy_set","333");
jedis.sadd("lsy_set","444");
jedis.sadd("lsy_set","555");
jedis.sadd("lsy_set","666");
System.out.println("增加set结果:"+jedis.smembers("lsy_set"));
//删除set中指定元素
jedis.srem("lsy_set","666");
System.out.println("删除set结果:"+jedis.smembers("lsy_set"));
//判断set中指定元素是否存在
Boolean isHas = jedis.sismember("lsy_set","555");
System.out.println("元素是否在set结果:"+isHas);
//查看set中所有元素
Set<String> set = jedis.smembers("lsy_set");
System.out.println("查看所有set结果:"+set);
//循环set中每一个元素
Set<String> stringSet = jedis.smembers("lsy_set");
Iterator<String> iterator = stringSet.iterator();
while (iterator.hasNext()){
System.out.println("循环每一个set结果:"+iterator.next());
}
jedis.sadd("lsy_two","111");
jedis.sadd("lsy_two","000");
jedis.sadd("lsy_two","555");
jedis.sadd("lsy_two","888");
//两个set的交集
Set<String> interSet = jedis.sinter("lsy_set","lsy_two");
System.out.println("交集set结果:"+interSet);
//两个set的并集
Set<String> unionSet = jedis.sunion("lsy_set","lsy_two");
System.out.println("并集set结果:"+unionSet);
//两个set的差集
Set<String> diffSet = jedis.sdiff("lsy_set","lsy_two");
System.out.println("差集set结果:"+diffSet);
}
B、redis-cluster客户端操作:
public static void clusterOperate(){
JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取集群客户端
//增加一个set
jedisCluster.sadd("lsy_set","111");
jedisCluster.sadd("lsy_set","222");
jedisCluster.sadd("lsy_set","333");
jedisCluster.sadd("lsy_set","444");
jedisCluster.sadd("lsy_set","555");
jedisCluster.sadd("lsy_set","666");
System.out.println("增加set结果:"+jedisCluster.smembers("lsy_set"));
//删除set中指定元素
jedisCluster.srem("lsy_set","666");
System.out.println("删除set结果:"+jedisCluster.smembers("lsy_set"));
//判断set中指定元素是否存在
Boolean isHas = jedisCluster.sismember("lsy_set","555");
System.out.println("元素是否在set结果:"+isHas);
//查看set中所有元素
Set<String> set = jedisCluster.smembers("lsy_set");
System.out.println("查看所有set结果:"+set);
//循环set中每一个元素
Set<String> stringSet = jedisCluster.smembers("lsy_set");
Iterator<String> iterator = stringSet.iterator();
while (iterator.hasNext()){
System.out.println("循环每一个set结果:"+iterator.next());
}
}
(5)操作hash:
A、单机客户端操作:
public static void standAloneOperate(){
Jedis jedis = RedisClient.getRedisClient();//获取单机客户端
//清空数据
jedis.flushDB();
//增加一个hash
jedis.hset("lsy_hash","001","hash_001");
jedis.hset("lsy_hash","002","hash_002");
jedis.hset("lsy_hash","003","hash_003");
jedis.hset("lsy_hash","005","hash_005");
System.out.println("增加一个hash的结果:"+jedis.hvals("lsy_hash"));
//删除指定hash指定key的值
jedis.hdel("lsy_hash","005");
System.out.println("删除指定key的hash的结果:"+jedis.hvals("lsy_hash"));
//增加指定hash指定整型键的值
jedis.hincrBy("lsy_hash","004",1);
jedis.hincrBy("lsy_hash","004",5);
jedis.hincrBy("lsy_hash","004",2);
System.out.println("整型键值增加hash的结果:"+jedis.hvals("lsy_hash"));
//判断指定hash中指定key的值是否存在
Boolean isHas = jedis.hexists("lsy_hash","004");
System.out.println("指定key是否存在hash的结果:"+isHas);
//获取指定hash指定key的值
String resultOne = jedis.hget("lsy_hash","003");
System.out.println("获取单个key的hash的结果:"+resultOne);
//获取指定hash多个key的值
List<String> resultList = jedis.hmget("lsy_hash","002","003");
System.out.println("获取多个key的hash的结果:"+resultList.toString());
//获取指定hash所有key
Set<String> resultKeySet = jedis.hkeys("lsy_hash");
System.out.println("获取所有key的hash的结果:"+resultKeySet);
//获取指定hash所有value
List<String> resultValueList = jedis.hvals("lsy_hash");
System.out.println("获取所有value的hash的结果:"+resultValueList.toString());
}
B、redis-cluster客户端操作:
public static void clusterOperate(){
JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取集群客户端
//增加一个hash
jedisCluster.hset("lsy_hash","001","hash_001");
jedisCluster.hset("lsy_hash","002","hash_002");
jedisCluster.hset("lsy_hash","003","hash_003");
jedisCluster.hset("lsy_hash","005","hash_005");
System.out.println("增加一个hash的结果:"+jedisCluster.hvals("lsy_hash"));
//删除指定hash指定key的值
jedisCluster.hdel("lsy_hash","005");
System.out.println("删除指定key的hash的结果:"+jedisCluster.hvals("lsy_hash"));
//增加指定hash指定整型键的值
jedisCluster.hincrBy("lsy_hash","004",1);
jedisCluster.hincrBy("lsy_hash","004",5);
jedisCluster.hincrBy("lsy_hash","004",2);
System.out.println("整型键值增加hash的结果:"+jedisCluster.hvals("lsy_hash"));
//判断指定hash中指定key的值是否存在
Boolean isHas = jedisCluster.hexists("lsy_hash","004");
System.out.println("指定key是否存在hash的结果:"+isHas);
//获取指定hash指定key的值
String resultOne = jedisCluster.hget("lsy_hash","003");
System.out.println("获取单个key的hash的结果:"+resultOne);
//获取指定hash多个key的值
List<String> resultList = jedisCluster.hmget("lsy_hash","002","003");
System.out.println("获取多个key的hash的结果:"+resultList.toString());
//获取指定hash所有key
Set<String> resultKeySet = jedisCluster.hkeys("lsy_hash");
System.out.println("获取所有key的hash的结果:"+resultKeySet);
//获取指定hash所有value
List<String> resultValueList = jedisCluster.hvals("lsy_hash");
System.out.println("获取所有value的hash的结果:"+resultValueList.toString());
}
(6)操作zset:
A、单机客户端操作:
public static void standAloneOperate(){
Jedis jedis = RedisClient.getRedisClient();//获取单机客户端
//清空数据
jedis.flushDB();
//增加一个zset
jedis.zadd("lsy_zset",1.0,"001");
jedis.zadd("lsy_zset",5.0,"002");
jedis.zadd("lsy_zset",3.0,"003");
jedis.zadd("lsy_zset",2.2,"004");
jedis.zadd("lsy_zset",3.5,"005");
System.out.println("增加一个zset的结果:"+jedis.zrange("lsy_zset",0,-1));
//删除指定zset指定key的值
jedis.zrem("lsy_zset","005");
System.out.println("删除指定key的值zset的结果:"+jedis.zrange("lsy_zset",0,-1));
//查看指定zset的元素个数
Long count = jedis.zcard("lsy_zset");
System.out.println("元素的个数zset的结果:"+count);
//查看指定zset中key在某个范围内个数
Long rangCount = jedis.zcount("lsy_zset",2,4);
System.out.println("key值在某个范围的个数zset的结果:"+rangCount);
//查看指定zset指定value的key值
Double key = jedis.zscore("lsy_zset","004");
System.out.println("查看某个元素的key值zset的结果:"+key);
//查看指定zset下标在某个范围内的值
Set<String> rangSet = jedis.zrange("lsy_zset",1,2);
System.out.println("下标范围内的元素zset的结果:"+rangSet);
//查看指定zset所有元素
Set<String> set = jedis.zrange("lsy_zset",0,-1);
System.out.println("所有元素zset的结果:"+set);
}
B、redis-cluster客户端操作:
public static void clusterOperate(){
JedisCluster jedisCluster = RedisClient.getRedisClusterClient();//获取集群客户端
//增加一个zset
jedisCluster.zadd("lsy_zset",1.0,"001");
jedisCluster.zadd("lsy_zset",5.0,"002");
jedisCluster.zadd("lsy_zset",3.0,"003");
jedisCluster.zadd("lsy_zset",2.2,"004");
jedisCluster.zadd("lsy_zset",3.5,"005");
System.out.println("增加一个zset的结果:"+jedisCluster.zrange("lsy_zset",0,-1));
//删除指定zset指定key的值
jedisCluster.zrem("lsy_zset","005");
System.out.println("删除指定key的值zset的结果:"+jedisCluster.zrange("lsy_zset",0,-1));
//查看指定zset的元素个数
Long count = jedisCluster.zcard("lsy_zset");
System.out.println("元素的个数zset的结果:"+count);
//查看指定zset中key在某个范围内个数
Long rangCount = jedisCluster.zcount("lsy_zset",2,4);
System.out.println("key值在某个范围的个数zset的结果:"+rangCount);
//查看指定zset指定value的key值
Double key = jedisCluster.zscore("lsy_zset","004");
System.out.println("查看某个元素的key值zset的结果:"+key);
//查看指定zset下标在某个范围内的值
Set<String> rangSet = jedisCluster.zrange("lsy_zset",1,2);
System.out.println("下标范围内的元素zset的结果:"+rangSet);
//查看指定zset所有元素
Set<String> set = jedisCluster.zrange("lsy_zset",0,-1);
System.out.println("所有元素zset的结果:"+set);
}