1. redis 配置
修改 redis.conf 文件中的 bind 配置
加上192.168.56.103,这个ip地址是redis所在服务器的ip,这样其他机器就可以通过这个ip地址远程连接redis
另外需要关闭 redis 所在服务器的防火墙
firewall-cmd --state:查看防火墙状态
systemctl stop firewalld.service:关闭防火墙
2. maven 依赖
<!-- 本人redis版本是6.2.6 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
3. 代码
1. 基础演示
import redis.clients.jedis.Jedis;
public class JedisTest {
public static void main(String[] args) {
//创建连接
Jedis jedis = new Jedis("192.168.56.103", 6379);
//执行命令
jedis.set("name","fengxiansheng");
//释放连接
jedis.close();
}
}
运行 main 方法,如果报下面错误,就检查一下上面 redis 的配置
运行成功后:
可以发现已经存储成功
也可以用代码来查看是否存储成功
Jedis jedis = new Jedis("192.168.56.103", 6379);
String result = jedis.set("name", "fengxiansheng2");
System.out.println(result);
System.out.println(jedis.get("name"));
jedis.close();
输出:
2. 操作列表
往 fengxiansheng 这个列表中添加3个元素
Jedis jedis = new Jedis("192.168.56.103", 6379);
Long res = jedis.lpush("fengxiansheng", "test1", "test2", "test3");
System.out.println(res);
jedis.close();
移除并获取列表的第一个元素
String result = jedis.lpop("fengxiansheng");
System.out.println(result);
3. 操作Map
Jedis jedis = new Jedis("192.168.56.103", 6379);
jedis.del("fengxiansheng");
Map<String, String> map = new HashMap<>();
map.put("name","fengxiansheng");
map.put("age","18");
Long res = jedis.hset("fengxiansheng", map);
System.out.println(res);
Map<String, String> result = jedis.hgetAll("fengxiansheng");
System.out.println(result);
jedis.close();
结果
4. 结论
其实 jedis 的 方法名 跟 命令 都是一一对应的,只要熟悉命令,用这些方法自然得心应手
4. Jedis 连接池
多个线程同时操作一个jedis 对象是不安全的,而且频繁的常见和销毁 jedis 对象,比较影响性能,所以推荐使用jedis连接池,来代替 new jedis 对象。
JedisPoolConfig poolConfig = new JedisPoolConfig();
//最大连接数
poolConfig.setMaxTotal(2);
//最大空闲连接数
poolConfig.setMaxIdle(2);
//获取jedis时,是否做有效性检测,如果为true,则得到的jedis实例都是可用的;
poolConfig.setTestOnBorrow(true);
//获取连接的最长等待时间,单位:毫秒,-1:会一直等待,直到获取连接
poolConfig.setMaxWaitMillis(100);
JedisPool jedisPool = new JedisPool(poolConfig, "192.168.56.103",6379);
Jedis jedis1= jedisPool.getResource();
Jedis jedis2 = jedisPool.getResource();
//jedis1、jedis2 都不释放连接
Jedis jedis3 = jedisPool.getResource();
代码中 jedis1、jedis2 获取后,都不释放连接
在获取 jedis3 的时候会等待100毫秒,如果还没获取到报错:
设置 获取连接的等待时间为:-1
//修改成-1 poolConfig.setMaxWaitMillis(100);
那么在获取 jedis3 的时候,会一直等待
上图中,程序一直不结束
在真正使用的时候,最好是搞一个类
public class JedisFactory {
private static JedisPool jedisPool = null;
static{
JedisPoolConfig poolConfig = new JedisPoolConfig();
//最大连接数
poolConfig.setMaxTotal(2);
//最大空闲连接数
poolConfig.setMaxIdle(2);
//获取jedis时,是否做有效性检测,如果为true,则得到的jedis实例都是可用的;
poolConfig.setTestOnBorrow(true);
//获取连接的最长等待时间,单位:毫秒,-1:会一直等待,直到获取连接
poolConfig.setMaxWaitMillis(-1);
jedisPool = new JedisPool(poolConfig, "192.168.56.103",6379);
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
}