Redis的Java客户端
- 一.Jedis依赖
- 1.引入依赖
- 2.redis端口问题
- (1)打包给Linux
- (2)配置SSH端口,进行映射
- 二.Java客户端上使用redis
- 1.连接Jedis服务器
- 2.redis通用命令
- set/get命令
- exists和del
- keys
- ex、ttl、type
- 3.String类型的命令
- mset和mget
- getrange和setrange
- incr、decr 和 append
- 4.List命令
- lpush和lrange
- rpush
- lpop
- rpop
- llen
- brpop
- 5.Set命令
- smembers 和 sadd
- sismember
- scard
- spop
- sinter
- sinterstore
- 6.Hash命令
- hget 和 hset
- hexists
- hdel
- hkeys 和 hvals
- hmget 和 hmset
- 7.ZSet命令
- zadd 、zrange和zrangewithscores
- zcard
- zrem
- zscore
- zrank
- 三.Spring客户端使用redis
- 1.redis的依赖
- 2.yml的配置文件
- 3. String类型命令
- 4.List类型
- 5.Set类型
- 6.Hash类型
- 7.ZSet类型
一.Jedis依赖
1.引入依赖
在Maven中引入Jedis的依赖,通过Maven中央仓库中进行查找:
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.4.2</version>
</dependency>
2.redis端口问题
由于redis的端口号6379默认被云服务器防火墙给进行保护起来了,如果手动关闭防火墙很容易被黑客入侵,所以不能够关闭防火墙。
如果想在Java上访问redis的服务器那么可以按照以下的2个方法:
(1)打包给Linux
把写好的Java代码打包成jar包,然后把jar包上传到Linux服务器上执行,这种方法手动太麻烦了,虽然也有插件,但是不太安全。
(2)配置SSH端口,进行映射
通过 SSH 隧道将本地端口与远程 Redis 服务端口绑定,使 Java 客户端通过本地端口间接访问远程 Redis。
步骤:
查看是否成功打开(成功就是下图):
二.Java客户端上使用redis
1.连接Jedis服务器
//连接Redis服务器JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
2.redis通用命令
try (Jedis jedis = jedisPool.getResource()) {//redis各种命令,就对应jedis对象的各种方法String pong = jedis.ping();System.out.println(pong);}
set/get命令
try (Jedis jedis = jedisPool.getResource()) {System.out.println("get和set的使用");//此处是进行测试,需要将数据库中的数据线清空jedis.flushAll();jedis.set("key1","111");jedis.set("key2","222");SetParams params = new SetParams();params.ex(10);params.xx();jedis.set("key1","333",params);String value = jedis.get("key1");System.out.println("value: " + value);}
exists和del
try (Jedis jedis = jedisPool.getResource()) {System.out.println("exists 和 del 的使用");//此处是进行测试,需要将数据库中的数据线清空jedis.flushAll();jedis.set("key1","111");jedis.set("key2","222");jedis.set("key3","333");jedis.set("key4","444");boolean result = jedis.exists("key1");System.out.println(result);long del = jedis.del("key1");System.out.println(del);result = jedis.exists("key1");System.out.println(result);//删除多个keydel = jedis.del("key2","key3","key4");System.out.println(del);//检查多个key是否存在long result1 = jedis.exists("key2","key3","key4");System.out.println(result1);}
keys
try (Jedis jedis = jedisPool.getResource()) {System.out.println("keys的使用");//此处是进行测试,需要将数据库中的数据线清空jedis.flushAll();jedis.set("key1","111");jedis.set("key2","222");jedis.set("key3","333");jedis.set("key4","444");Set<String> keys = jedis.keys("*");System.out.println(keys);}
ex、ttl、type
try (Jedis jedis = jedisPool.getResource()) {System.out.println("ex、ttl 和 type 的使用");//此处是进行测试,需要将数据库中的数据线清空jedis.flushAll();jedis.set("key1","111");jedis.expire("key1",10);long time = jedis.ttl("key1");System.out.println("剩余时间: " + time);Thread.sleep(3000);time = jedis.ttl("key1");System.out.println("剩余时间: " + time);String s = jedis.type("key1");System.out.println("类型: " + s);} catch (InterruptedException e) {throw new RuntimeException(e);}
3.String类型的命令
mset和mget
try (Jedis jedis = jedisPool.getResource()) {System.out.println("mget 和 mset的使用");jedis.flushAll();jedis.mset("key1","11","key2","22", "key3","33");List<String> list = jedis.mget("key1","key2","key3");System.out.println("value: " + list);}
getrange和setrange
try (Jedis jedis = jedisPool.getResource()) {System.out.println("getrange 和 setrange的使用");jedis.flushAll();jedis.set("key1","asasdsadsaasd");String value = jedis.getrange("key1",2,5);System.out.println("value: " + value);jedis.setrange("key1",2,"123");String value1 = jedis.get("key1");System.out.println("value1: " + value1);}
incr、decr 和 append
try (Jedis jedis = jedisPool.getResource()) {System.out.println("append 、incr 和 decr 的使用");jedis.flushAll();jedis.set("key1","abcdefg");jedis.append("key1","123456");String value = jedis.get("key1");System.out.println("value: " + value);jedis.set("key2","100");long result = jedis.incr("key2");System.out.println("result : " + result);String value2 = jedis.get("key2");System.out.println("value2: " + value2);result = jedis.decr("key2");System.out.println("result : " + result);value2 = jedis.get("key2");System.out.println("value2: " + value2);}
4.List命令
lpush和lrange
try(Jedis jedis = jedisPool.getResource()) {System.out.println("lpush 和 lrange 的使用");jedis.flushAll();jedis.lpush("key1","111","222","333");List<String> result = jedis.lrange("key1",0,-1);System.out.println("result: " + result);}
rpush
try(Jedis jedis = jedisPool.getResource()) {System.out.println("lpush 和 lrange 的使用");jedis.flushAll();jedis.rpush("key1","111","222","333");List<String> result = jedis.lrange("key1",0,-1);System.out.println("result: " + result);}
lpop
try(Jedis jedis = jedisPool.getResource()) {System.out.println("lpop 的使用");jedis.flushAll();jedis.rpush("key1","111","222","333");String result = jedis.lpop("key1");System.out.println("result: " + result);result = jedis.lpop("key1");System.out.println("result: " + result);result = jedis.lpop("key1");System.out.println("result: " + result);result = jedis.lpop("key1");System.out.println("result: " + result);}
rpop
try(Jedis jedis = jedisPool.getResource()) {System.out.println("rpop 的使用");jedis.flushAll();jedis.rpush("key1","111","222","333");String result = jedis.rpop("key1");System.out.println("result: " + result);result = jedis.rpop("key1");System.out.println("result: " + result);result = jedis.rpop("key1");System.out.println("result: " + result);result = jedis.rpop("key1");System.out.println("result: " + result);}
llen
try(Jedis jedis = jedisPool.getResource()) {System.out.println("rpop 的使用");jedis.flushAll();jedis.rpush("key1","111","222","333");long result = jedis.llen("key1");System.out.println("result: " + result);}
brpop
try(Jedis jedis = jedisPool.getResource()) {System.out.println("brpop 的使用");jedis.flushAll();List<String> result = jedis.brpop(3,"key1");System.out.println("result[0]: " + result.get(0));System.out.println("result[1]: " + result.get(1));}
5.Set命令
smembers 和 sadd
try(Jedis jedis = jedisPool.getResource()) {System.out.println("sadd 和 smembers 使用");jedis.flushAll();jedis.sadd("key1","11","22","33");Set<String> result = jedis.smembers("key1");System.out.println("result: " + result);}
sismember
try(Jedis jedis = jedisPool.getResource()) {System.out.println("sismember 使用");jedis.flushAll();jedis.sadd("key1","11","22","33");boolean result = jedis.sismember("key1","11");System.out.println("result: " + result);}
scard
try(Jedis jedis = jedisPool.getResource()) {System.out.println("scard 使用");jedis.flushAll();jedis.sadd("key1","11","22","33");long result = jedis.scard("key1");System.out.println("result: " + result);}
spop
try(Jedis jedis = jedisPool.getResource()) {System.out.println("spop 使用");jedis.flushAll();jedis.sadd("key1","11","22","33");String result = jedis.spop("key1");System.out.println("result: " + result);}
sinter
try(Jedis jedis = jedisPool.getResource()) {System.out.println("sinter 使用");jedis.flushAll();jedis.sadd("key1","11","22","33");jedis.sadd("key2","11","22","44");Set<String> result = jedis.sinter("key1","key2");System.out.println("result: " + result);}
sinterstore
try(Jedis jedis = jedisPool.getResource()) {System.out.println("sinterstore 使用");jedis.flushAll();jedis.sadd("key1","11","22","33");jedis.sadd("key2","11","22","44");long result = jedis.sinterstore("key3","key1","key2");Set<String> result1 = jedis.smembers("key3");System.out.println("result: " + result);System.out.println("result1: " + result1);}
6.Hash命令
hget 和 hset
try(Jedis jedis = jedisPool.getResource()) {System.out.println("hset 和 hget的使用");jedis.flushAll();jedis.hset("key1","f1","11");HashMap<String,String> map = new HashMap<>();map.put("f2","22");map.put("f3","33");jedis.hset("key1",map);String result = jedis.hget("key1","f1");System.out.println("result: " + result);result = jedis.hget("key1","f2");System.out.println("result: " + result);result = jedis.hget("key1","f3");System.out.println("result: " + result);result = jedis.hget("key1","f4");System.out.println("result: " + result);}
hexists
try(Jedis jedis = jedisPool.getResource()) {System.out.println("hexists 的使用");jedis.flushAll();jedis.hset("key1","f1","11");HashMap<String,String> map = new HashMap<>();map.put("f2","22");map.put("f3","33");jedis.hset("key1",map);boolean result = jedis.hexists("key1","f1");System.out.println("result: " + result);result = jedis.hexists("key1","f1111");System.out.println("result: " + result);}
hdel
try(Jedis jedis = jedisPool.getResource()) {System.out.println("hdel 的使用");jedis.flushAll();jedis.hset("key1","f1","11");HashMap<String,String> map = new HashMap<>();map.put("f2","22");map.put("f3","33");jedis.hset("key1",map);long result = jedis.hdel("key1","f1");System.out.println("result: " + result);result = jedis.hdel("key1","f2","f3");System.out.println("result: " + result);result = jedis.hdel("key1","f1111");System.out.println("result: " + result);}
hkeys 和 hvals
try(Jedis jedis = jedisPool.getResource()) {System.out.println("hkeys 和 hvals 的使用");jedis.flushAll();jedis.hset("key1","f1","11");HashMap<String,String> map = new HashMap<>();map.put("f2","22");map.put("f3","33");jedis.hset("key1",map);Set<String> result = jedis.hkeys("key1");System.out.println("result: " + result);List<String> result1 = jedis.hvals("key1");System.out.println("result1: " + result1);}
hmget 和 hmset
try(Jedis jedis = jedisPool.getResource()) {System.out.println("hmset 和 hmget 的使用");jedis.flushAll();HashMap<String,String> map = new HashMap<>();map.put("f1","11");map.put("f2","22");map.put("f3","33");jedis.hmset("key1",map);List<String> result = jedis.hmget("key1","f1","f2","f3");System.out.println("result: " + result);}
7.ZSet命令
zadd 、zrange和zrangewithscores
try (Jedis jedis = jedisPool.getResource()) {System.out.println("zadd 和 zrange 的使用");jedis.flushAll();jedis.zadd("key1",10,"zhangsan");Map<String,Double> map = new HashMap<>();map.put("lisi",20.0);map.put("wangwu",30.0);jedis.zadd("key1",map);List<String> result = jedis.zrange("key1",0,-1);System.out.println("result: " + result);List<Tuple>result1 = jedis.zrangeWithScores("key1",0,-1);System.out.println("result1: " + result1);//拆分出来String member = result1.get(0).getElement();Double score = result1.get(0).getScore();System.out.println("member: " +member);System.out.println("score: " +score);}
zcard
try (Jedis jedis = jedisPool.getResource()) {System.out.println("zcard 的使用");jedis.flushAll();jedis.zadd("key1",10,"zhangsan");Map<String,Double> map = new HashMap<>();map.put("lisi",20.0);map.put("wangwu",30.0);jedis.zadd("key1",map);long result = jedis.zcard("key1");System.out.println("result: " + result);}
zrem
try (Jedis jedis = jedisPool.getResource()) {System.out.println("zrem 的使用");jedis.flushAll();jedis.zadd("key1",10,"zhangsan");Map<String,Double> map = new HashMap<>();map.put("lisi",20.0);map.put("wangwu",30.0);jedis.zadd("key1",map);long result = jedis.zrem("key1","zhangsan","lisi");System.out.println("result: " + result);List<Tuple> result1 = jedis.zrangeWithScores("key1",0,-1);System.out.println("result1: " + result1);}
zscore
try (Jedis jedis = jedisPool.getResource()) {System.out.println("zscore 的使用");jedis.flushAll();jedis.zadd("key1",10,"zhangsan");Map<String,Double> map = new HashMap<>();map.put("lisi",20.0);map.put("wangwu",30.0);jedis.zadd("key1",map);Double result = jedis.zscore("key1","zhangsan");System.out.println("result: " + result);}
zrank
try (Jedis jedis = jedisPool.getResource()) {System.out.println("zrank 的使用");jedis.flushAll();jedis.zadd("key1",10,"zhangsan");Map<String,Double> map = new HashMap<>();map.put("lisi",20.0);map.put("wangwu",30.0);jedis.zadd("key1",map);long result = jedis.zrank("key1","lisi");System.out.println("result: " + result);}
三.Spring客户端使用redis
1.redis的依赖
2.yml的配置文件
3. String类型命令
传递redis的文本数据需要注入一个对象(非常重要):
@Autowiredprivate StringRedisTemplate redisTemplate;@GetMapping("/testString")public String testString() {//redisTemplage将不同类型的方法进行了重新排放//插入元素redisTemplate.opsForValue().set("key1","111");redisTemplate.opsForValue().set("key2","222");redisTemplate.opsForValue().set("key2","333");//获取元素String value = redisTemplate.opsForValue().get("key1");System.out.println("value: " + value);return "ok";}
4.List类型
可以通过execute方法来使用redis原生的命令,在execute方法中再使用RedisCallback的函数接口就可以使用了。
@GetMapping("/testList")public String testList() {//使用redis原来的命令redisTemplate.execute((RedisConnection connetion) -> {//清空数据库中的数据connetion.flushAll();return null;});//头插数据redisTemplate.opsForList().leftPush("key","111");redisTemplate.opsForList().leftPush("key","222");redisTemplate.opsForList().leftPush("key","333");//尾删数据String value = redisTemplate.opsForList().rightPop("key");System.out.println("value: " + value);value = redisTemplate.opsForList().rightPop("key");System.out.println("value: " + value);value = redisTemplate.opsForList().rightPop("key");System.out.println("value: " + value);return "ok";}
5.Set类型
@GetMapping("/testSet")public String testSet() {//使用redis原来的命令redisTemplate.execute((RedisConnection connetion) -> {connetion.flushAll();return null;});//插入数据redisTemplate.opsForSet().add("key","111","222","333");//获取数据Set<String> value = redisTemplate.opsForSet().members("key");System.out.println("value: " + value);//数据是否存在Boolean exists = redisTemplate.opsForSet().isMember("key","111");System.out.println("exists: " + exists);//有几条数据long result = redisTemplate.opsForSet().size("key");System.out.println("count: " +result);//删除数据redisTemplate.opsForSet().remove("key","111","222");//获取当前数据个数value = redisTemplate.opsForSet().members("key");System.out.println("value: " + value);return "ok";}
6.Hash类型
@GetMapping("/testHash")public String testHash() {//使用redis原来的命令redisTemplate.execute((RedisConnection connetion) -> {connetion.flushAll();return null;});//插入数据redisTemplate.opsForHash().put("key","f1","111");redisTemplate.opsForHash().put("key","f2","222");redisTemplate.opsForHash().put("key","f3","333");//获取数据String value = (String) redisTemplate.opsForHash().get("key","f1");System.out.println("value: " + value);//判断数据是否存在Boolean exists = redisTemplate.opsForHash().hasKey("key","f1");System.out.println("exists: " + exists);//删除数据redisTemplate.opsForHash().delete("key","f1","f2");//有几条数据long result = redisTemplate.opsForHash().size("key");System.out.println("count: " +result);return "ok";}
7.ZSet类型
@GetMapping("/testZSet")public String testZSet() {//使用redis原来的命令redisTemplate.execute((RedisConnection connetion) -> {connetion.flushAll();return null;});//插入数据redisTemplate.opsForZSet().add("key","zhangsan",10);redisTemplate.opsForZSet().add("key","lisi",20);redisTemplate.opsForZSet().add("key","wangwu",30);//获取数据Set<String> value = redisTemplate.opsForZSet().range("key",0,-1);System.out.println("value: " + value);//获取数据Set<ZSetOperations.TypedTuple<String>>value1 = redisTemplate.opsForZSet().rangeWithScores("key",0,-1);System.out.println("value1: " + value1);//获取member的scoreDouble result = redisTemplate.opsForZSet().score("key","zhangsan");System.out.println("count: " +result);//删除数据redisTemplate.opsForZSet().remove("key","zhangsan");//获取数据长度Long size = redisTemplate.opsForZSet().size("key");System.out.println("size: " + size);//获取数据排行Long rank = redisTemplate.opsForZSet().rank("key","lisi");System.out.println("rank: " + rank);return "ok";}