文章目录
- 一. java 操作 redis
- 1. 引入依赖
- 2. 配置端口转发
- 3. 连接redis服务器
- 二. 基础命令
- get/set
- exists/del
- KEYS
- EXPIRE/TTL
- TYPE
之前介绍的是各种redis的基本操作/命令, 都是在redis命令行客户端, 手动执行的
但是在日常开发中, 更多的是使用redis的api, 来实现定制化的redis客户端程序, 进一步操作redis服务器
redis服务器在官网公开了使用的协议RESP, 任何一个第三方都可以通过上述协议, 实现一个和redis服务器通信的客户端程序
已经有很多大佬做好了库, 可以让我们直接调用(不必关注redis协议的细节)
在java生态中, 封装了RESP协议, 实现的redis客户端有很多, 我们主要使用jedis
一. java 操作 redis
1. 引入依赖
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.1.0</version>
</dependency>
2. 配置端口转发
我们的windows电脑, 需要通过终端(xshell)登录云服务器的外网IP, 才能访问到linux云服务器, 本质上也是网络通信, 通过ssh协议/程序, 默认是访问22端口号, 这样才能达到远程操控的目的
之前, 我们是通过在云服务器端开放端口号, 来访问程序, 但是这个方法是非常不安全的, redis服务器的端口号6379, 非常容易被黑客入侵
ssh协议功能非常强大, 其中有一个很重要的功能, 就是支持端口转发, 可以理解为通过ssh的22端口, 来传递其他端口的数据
于是我们可以构造一个特殊的ssh数据包, 把要访问的redis请求, 放到ssh数据包中
这个数据包就会通过22端口发送给服务器, 服务器的ssh服务器程序, 就能解析出上述的数据包, 然后把数据包交给6379端口的程序
一个linux主机上, 存在的服务器有很多, ssh也可能需要给多个端口提供数据, 这个时候, 为了区分不同的端口, 往往会把服务器的端口在本地用另外一个端口来进行表示
此时, 我们只需要进行简单的配置, 后续就能将本地的端口当做云服务器的端口使用
将6379端口号, 映射到本地的8888端口号
在本地验证8888端口是否被占用, 被占用则映射成功
注意: 只有当ssh连接上之后, 端口转发才能生效
3. 连接redis服务器
public class RedisDemo {
public static void main(String[] args) {
JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
try(Jedis jedis = jedisPool.getResource()){
String pong = jedis.ping();
System.out.println(pong);
}
}
}
二. 基础命令
get/set
public static void test1(Jedis jedis){
jedis.flushAll();
jedis.set("key1", "111");
jedis.set("key2", "222");
SetParams params = new SetParams();
params.ex(10);
params.xx();//存在设置成功
// params.nx();//不存在设置成功
jedis.set("key1", "444", params);
String value = jedis.get("key1");
System.out.println(value);
}
exists/del
public static void test2(Jedis jedis){
jedis.flushAll();
jedis.set("key1", "111");
jedis.set("key2", "222");
boolean result = jedis.exists("key1");
System.out.println("result = " + result);
long result2 = jedis.del("key1");
System.out.println("result2 = " + result2);
result = jedis.exists("key1");
System.out.println("result = " + result);
result2 = jedis.del("key1", "key2", "key3");//删除多个.
System.out.println("result2 = " + result2);
}
KEYS
public static void test3(Jedis jedis){
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);
}
EXPIRE/TTL
public static void test4(Jedis jedis) throws InterruptedException {
jedis.flushAll();
jedis.set("key", "111");
jedis.expire("key", 10);
Thread.sleep(3000);
long time = jedis.ttl("key");
System.out.println(time);
}
TYPE
public static void test5(Jedis jedis){
jedis.flushAll();
jedis.set("key", "111");
String type = jedis.type("key");
System.out.println(type);
jedis.lpush("key2", "111", "222", "333");
type = jedis.type("key2");
System.out.println(type);
jedis.hset("key3", "f1", "111");
type = jedis.type("key3");
System.out.println(type);
jedis.sadd("key4", "111", "222", "333");
type = jedis.type("key4");
System.out.println(type);
jedis.zadd("key5", 10, "zhangsan");
type = jedis.type("key5");
System.out.println(type);
}