redis–13–Jedis使用
代码位置
https://gitee.com/DanShenGuiZu/learnDemo/tree/master/redis-learn/jedis
1、redis.conf 修改
# 允许远程连接
# bind 127.0.0.1
# 允许远程连接
protected-mode no
不管整合spring,还是整合springboot,这里都是要做的步骤。
2、整合Spring
2.1、所需要的jar包
<!-- Jedis所需要的jar包-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
2.2、测试–单机redis或者主从redis
2.2.1、连接测试
public class Demo01 {
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.187.138",6379);
String pong = jedis.ping();
System.out.println("连接成功:"+pong);
jedis.close();
}
}
2.2.2、redis数据类型测试
代码
public class Demo02 {
private static Jedis jedis;
public static void main(String[] args) {
System.out.println("-----------------获取 jedis-------------------");
getJedis();
System.out.println("-----------------通用key 测试-------------------");
keys_method();
System.out.println("-----------------String 测试-------------------");
string_method();
System.out.println("-----------------list 测试-------------------");
list_method();
System.out.println("-----------------set 测试-------------------");
set_method();
System.out.println("-----------------hash 测试-------------------");
hash_method();
System.out.println("-----------------zset 测试-------------------");
zset_method();
System.out.println("-----------------关闭 jedis-------------------");
close();
}
/**
* hash 测试
*/
public static void zset_method() {
jedis.zadd("zset01", 100, "li01");
jedis.zadd("zset01", 90, "li02");
jedis.zadd("zset01", 80, "li03");
jedis.zadd("zset01", 70, "li04");
Set<String> zrange = jedis.zrange("zset01", 0, -1);
for (String e : zrange) {
System.out.println("zset 测试-->" + e);
}
}
/**
* hash 测试
*/
public static void hash_method() {
jedis.hset("user", "userName", "lisi");
System.out.println("hash 测试-->" + jedis.hget("user", "userName"));
Map<String, String> map = new HashMap<String, String>();
map.put("phone", "1111");
map.put("address", "222");
map.put("email", "333");
jedis.hmset("user2", map);
List<String> result = jedis.hmget("user2", "phone", "address");
for (String element : result) {
System.out.println("hash 测试-->" + element);
}
}
/**
* set 测试
*/
public static void set_method() {
jedis.sadd("orders", "01");
jedis.sadd("orders", "02");
jedis.sadd("orders", "03");
jedis.sadd("orders", "04");
Set<String> smembers = jedis.smembers("orders");
for (String order : smembers) {
System.out.println("set 测试-->" + order);
}
// 删除orders集合中value=04的元素
Long srem = jedis.srem("orders", "04");
System.out.println("set 测试-->成功删除的数量" + srem);
}
/**
* list 测试
*/
public static void list_method() {
jedis.lpush("mylist", "a", "b", "c", "d");
List<String> list = jedis.lrange("mylist", 0, -1);
for (String element : list) {
System.out.println("list 测试-->" + element);
}
}
/**
* String 测试
*/
public static void string_method() {
jedis.mset("str1", "v1", "str2", "v2", "str3", "v3");
System.out.println("String 测试-->" + jedis.mget("str1", "str2", "str3"));
}
/**
* 通用key测试
*/
public static void keys_method() {
jedis.set("k1", "v1");
jedis.set("k2", "v2");
jedis.set("k3", "v3");
Set<String> keys = jedis.keys("*");
System.out.println("通用key测试-->keys.size:" + keys.size());
for (String key : keys) {
System.out.println("通用key测试-->key:" + key);
}
System.out.println("通用key测试-->k1是否存在:" + jedis.exists("k1"));
System.out.println("通用key测试-->k1的过期时间:" + jedis.ttl("k1"));
System.out.println("通用key测试-->key的值:" + jedis.get("k1"));
}
public static void getJedis() {
jedis = new Jedis("192.168.187.138", 6379);
String pong = jedis.ping();
System.out.println("连接成功:" + pong);
}
public static void close() {
jedis.close();
}
}
结果
-----------------获取 jedis-------------------
连接成功:PONG
-----------------通用key 测试-------------------
通用key测试-->keys.size:3
通用key测试-->key:k3
通用key测试-->key:k1
通用key测试-->key:k2
通用key测试-->k1是否存在:true
通用key测试-->k1的过期时间:-1
通用key测试-->key的值:v1
-----------------String 测试-------------------
String 测试-->[v1, v2, v3]
-----------------list 测试-------------------
list 测试-->d
list 测试-->c
list 测试-->b
list 测试-->a
-----------------set 测试-------------------
set 测试-->04
set 测试-->02
set 测试-->03
set 测试-->01
set 测试-->成功删除的数量1
-----------------hash 测试-------------------
hash 测试-->lisi
hash 测试-->1111
hash 测试-->222
-----------------zset 测试-------------------
zset 测试-->li04
zset 测试-->li03
zset 测试-->li02
zset 测试-->li01
-----------------关闭 jedis-------------------
Process finished with exit code 0
2.3、测试–哨兵
package com.example.jedis.demo;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;
import java.util.HashSet;
import java.util.Set;
/**
* 描述该类
*
* @author <a href="920786312@qq.com">周飞</a>
* @class: Demo01
* @date 2022/2/2 15:23
* @Verson 1.0 -2022/2/2 15:23
* @see
*/
public class Demo03 {
public static void main(String[] args) {
Jedis jedis =getJedisFromSentinel();
jedis.set("k1", "v1");
System.out.println("哨兵测试:" + jedis.get("k1"));
jedis.close();
}
private static JedisSentinelPool jedisSentinelPool=null;
public static Jedis getJedisFromSentinel(){
if(jedisSentinelPool==null){
//redis主从机器访问密码
String password="123456";
//哨兵配置
Set<String> sentinelSet=new HashSet<>();
sentinelSet.add("192.168.187.139:26379");
sentinelSet.add("192.168.187.138:26380");
sentinelSet.add("192.168.187.138:26381");
JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(10); //最大可用连接数
jedisPoolConfig.setMaxIdle(5); //最大闲置连接数
jedisPoolConfig.setMinIdle(5); //最小闲置连接数
jedisPoolConfig.setBlockWhenExhausted(true); //连接耗尽是否等待
jedisPoolConfig.setMaxWaitMillis(2000); //等待时间
jedisPoolConfig.setTestOnBorrow(true); //取连接的时候进行一下测试 ping pong
jedisSentinelPool=new JedisSentinelPool("appmaster",sentinelSet,jedisPoolConfig,password);
return jedisSentinelPool.getResource();
}else{
return jedisSentinelPool.getResource();
}
}
}
2.4、测试–集群
package com.example.jedis.demo;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import redis.clients.jedis.*;
/**
* 描述该类
*
* @author <a href="920786312@qq.com">周飞</a>
* @class: Demo01
* @date 2022/2/2 15:23
* @Verson 1.0 -2022/2/2 15:23
* @see
*/
public class Demo04 {
public static void main(String[] args) {
Set<HostAndPort> set = new HashSet<HostAndPort>();
set.add(new HostAndPort("192.168.187.139", 7000));
set.add(new HostAndPort("192.168.187.139", 7001));
set.add(new HostAndPort("192.168.187.139", 7002));
set.add(new HostAndPort("192.168.187.139", 7003));
set.add(new HostAndPort("192.168.187.139", 7004));
set.add(new HostAndPort("192.168.187.139", 7005));
int connectionTimeout = 2000;
int soTimeout = 2000;
int maxAttempts = 5;
// redis认证密码
String password = "123456";
// 连接
JedisCluster jedisCluster = new JedisCluster(set, connectionTimeout, soTimeout, maxAttempts, password,
new GenericObjectPoolConfig());
jedisCluster.set("k1", "v1");
System.out.println("集群测试:" + jedisCluster.get("k1"));
jedisCluster.close();
}
}
3、整合 Spring Boot
3.1、引入redis相关依赖
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring2.X集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
3.2、测试–单机或者主从场景
application.properties 配置redis
#Redis服务器地址
spring.redis.host=192.168.187.138
#Redis服务器连接端口
spring.redis.port=6379
#Redis数据库索引(默认为0)
spring.redis.database= 0
#连接超时时间(毫秒)
spring.redis.timeout=1800000
#连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=5
#连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
RedisTestController
*/
@RestController
public class RedisTestController {
@Autowired
private RedisTemplate redisTemplate;
@RequestMapping("/redisTest")
public String testRedis() {
// 设置值到redis
redisTemplate.opsForValue().set("k1", "v1");
// 从redis获取值
String name = (String) redisTemplate.opsForValue().get("k1");
return name;
}
}
3.3、测试–哨兵
application.properties 配置redis
# Redis服务器地址
# spring.redis.host=192.168.187.138
# Redis服务器连接端口
# spring.redis.port=6379
#Redis数据库索引(默认为0)
spring.redis.database= 0
#连接超时时间(毫秒)
spring.redis.timeout=1800000
#连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=5
#连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
# redis主从机器的访问密码
spring.redis.password=123456
# redis 主机的名称
spring.redis.sentinel.master=appmaster
#哨兵列表
spring.redis.sentinel.nodes=192.168.187.139:26379,192.168.187.139:26380,192.168.187.139:26381
3.4、测试–集群
application.properties 配置redis
#Redis服务器地址
# spring.redis.host=192.168.187.138
#Redis服务器连接端口
# spring.redis.port=6379
#Redis数据库索引(默认为0)
spring.redis.database= 0
#连接超时时间(毫秒)
spring.redis.timeout=1800000
#连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=20
#最大阻塞等待时间(负数表示没限制)
spring.redis.lettuce.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=5
#连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
# redis主从机器的访问密码
spring.redis.password=123456
# redis 主机的名称
# spring.redis.sentinel.master=appmaster
#哨兵列表
# spring.redis.sentinel.nodes=192.168.187.139:26379,192.168.187.139:26380,192.168.187.139:26381
# 集群列表
spring.redis.cluster.nodes=192.168.187.139:7000,192.168.187.139:7001,192.168.187.139:7002,192.168.187.139:7003,192\
.168.187.139:7004,192.168.187.139:7005