使用springboot集成redis
1.Jedis使用
创建springboot项目,pom文件加入maven
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
使用Jedis,也要加入Jedis的依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency>
代码
//redis 服务ip和端口
Jedis jedis = new Jedis("ip地址", 6379);
//redis密码
jedis.auth("123456");
//测试是否成功
System.out.println(jedis.ping());成功

命令API大多都见名知意,这里就简单列举几个。
//redis 服务ip和端口
Jedis jedis = new Jedis("localhost", 6379);
//redis密码
jedis.auth("123456");
//测试是否成功
System.out.println(jedis.ping());
//string类型
System.out.println("String-----");
jedis.set("k1","v1");
System.out.println(jedis.get("k1"));
System.out.println("过期时间:" + jedis.ttl("k1"));
jedis.expire("k1",20L);
System.out.println("过期时间:" + jedis.ttl("k1"));
//list类型
System.out.println("list-----");
jedis.lpush("list1","1","2","3");
List<String> list = jedis.lrange("list1", 0, -1);
for (String e : list) {
System.out.print(e + " ");
}
System.out.println();
//命令keys *
Set<String> keys = jedis.keys("*");
System.out.println(keys);
2.lettuce使用
Jedis客户端连接Redis服务器的时候,每个线程都要自己创建Jedis实例去连接。
由此诞生了lettuce。
maven的pom文件加入依赖
<dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </dependency>
代码示例
//使用构造器链式编程来builder
RedisURI uri = RedisURI.builder()
.redis("localhost")
.withPort(6379)
.withAuthentication("default", "123456")
.build();
//连接客户端
RedisClient redisClient = RedisClient.create(uri);
StatefulRedisConnection connect = redisClient.connect();
//通过connect创建command
RedisCommands commands = connect.sync();
commands.set("k1","v1");
System.out.println(commands.get("k1"));
List keys = commands.keys("*");
System.out.println(keys);
//关闭释放资源
connect.close();
redisClient.shutdown();其会输出日志

3.RedisTemplate使用
其底层使用的就是lettuce。
加入依赖
<!--SpringBoot与Redis整合依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
可以看到包含lettuce依赖。

在application.yml加入配置
spring:
redis:
database: 0
host: 8.134.133.76
password: 123456
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0在Service中注入
@Resource private RedisTemplate redisTemplate;
然后就可以在业务中使用。 大致使用方法如下
redisTemplate.opsForValue(); //提供了操作string类型的所有方法 redisTemplate.opsForList(); // 提供了操作list类型的所有方法 redisTemplate.opsForSet(); //提供了操作set的所有方法 redisTemplate.opsForHash(); //提供了操作hash表的所有方法 redisTemplate.opsForZSet(); //提供了操作zset的所有方法
如:
redisTemplate.opsForValue().set(key,value); System.out.println(redisTemplate.opsForValue().get(key));
但是由于序列化问题,默认存的key会是一串我们不认识的字符串。
"\xac\xed\x00\x05t\x00\aord:102" 没有序列化过
因为默认键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。而RedisTemplate默认使用的是却是JdkSerializationRedisSerializer。
在源码,默认使用JDK 序列化方式


不过StringRedisTemplate默认使用的是StringRedisSerializer。

所以
第一种方法,直接使用StringRedisTemplate,不过redis客户端获取值还是一串我们不认识的字符串(登入客户端加入–raw参数就正常了,如redis-cli -a 123456 –raw)。其余到正常了。
@Resource private StringRedisTemplate redisTemplate;
第二种方法,加入配置类
参考StringRedisTemplate
package com.dreams.redis7.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig
{
/**
* redis序列化的工具配置类,下面这个请一定开启配置
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory)
{
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
//设置key序列化方式string
redisTemplate.setKeySerializer(new StringRedisSerializer());
//设置value的序列化方式json,使用GenericJackson2JsonRedisSerializer替换默认序列化
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}这样就正常了。
4.集群使用redis
在application.yml加入配置
spring:
redis:
password: 123456
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0
cluster:
max-redirects: 3
nodes: 8.134.133.76:6381,8.134.133.76:6382,8.134.133.76:6383,8.134.133.76:6384,8.134.133.76:6385,8.134.133.76:6386
但是一旦一个主机宕机,SpringBoot客户端没有动态感知到RedisCluster的最新集群信息
开启集群拓扑动态感应刷新,在application.yml加入配置即可
spring:
redis:
password: 123456
lettuce:
pool:
max-active: 8
max-wait: -1ms
max-idle: 8
min-idle: 0
cluster:
refresh:
#支持集群拓扑动态感应刷新,自适应拓扑刷新是否使用所有可用的更新,默认false关闭
adaptive: true
#定时刷新
period: 2000
cluster:
max-redirects: 3
nodes: 8.134.133.76:6381,8.134.133.76:6382,8.134.133.76:6383,8.134.133.76:6384,8.134.133.76:6385,8.134.133.76:6386


