几年前我用的还是Jedis,貌似现在Lettuce更加流行了,而且Springboot现在集成的也是Lettuce
官方文档https://lettuce.io/docs/getting-started.html
1 Lettuce
1.1 建立连接
添加Maven依赖
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
import io.lettuce.core.cluster.RedisClusterClient;
import io.lettuce.core.cluster.api.StatefulRedisClusterConnection;
public class RedisOperation {
public static void firstConnect(String password, String host, String port) {
RedisClusterClient redisClient = RedisClusterClient.create("redis://" + password + "@" + host + ":" + port);
StatefulRedisClusterConnection<String, String> connection = redisClient.connect();
System.out.println("成功连接Redis");
connection.close();
redisClient.shutdown();
}
public static void main(String[] args) {
firstConnect("password", "你的IP", "端口");
}
}
1.2 简单增删改查
嗯,多吃粗粮,对身体好
import io.lettuce.core.api.sync.RedisStringCommands;
import io.lettuce.core.cluster.RedisClusterClient;
import io.lettuce.core.cluster.api.StatefulRedisClusterConnection;
import io.lettuce.core.cluster.api.sync.RedisAdvancedClusterCommands;
import io.lettuce.core.cluster.api.sync.RedisClusterCommands;
public class RedisOperation {
public static void simpleOperation(String password, String host, String port) {
RedisClusterClient redisClient = RedisClusterClient.create("redis://" + password + "@" + host + ":" + port);
StatefulRedisClusterConnection<String, String> connection = redisClient.connect();
RedisClusterCommands<String, String> commands = connection.sync();
commands.set("蔬菜", "土豆");
System.out.println(commands.get("蔬菜"));
commands.set("蔬菜", "地瓜");
System.out.println(commands.get("蔬菜"));
commands.del("蔬菜");
System.out.println(commands.get("蔬菜"));
connection.close();
}
public static void main(String[] args) {
simpleOperation("password", "你的IP", "端口");
}
}
2 springboot整合
sprintboot内置了Lettuce,官方文档https://docs.spring.io/spring-data/redis/docs/2.0.13.RELEASE/reference/html/#redis
springboot提供了RedisTemplate,封装了底层Redis框架的所有操作,支持Jedis和Lettuce,默认使用Lettuce框架。RedisTemplate是线程安全的,且封装了所有连接的管理,使用极度方便
2.1 配置
因为Redis是有密码的,所以需要稍微配置一下Redis连接
在项目里新建springboot配置文件application.yml,nodes里面是IP:端口的、以逗号分隔的列表
redis:
nodes:
IP:7000, IP:7001, IP:7002, IP:7003, IP:7004, IP:7005
pass:
password
新建RedisConfig类
package com.chinatelecom.flydragon.redis;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import java.util.List;
@Configuration
public class RedisConfig {
// Redis 主机列表
@Value("#{'${spring.redis.nodes}'.split(', ')}")
private List<String> redisHosts;
// Redis 密码
@Value("${spring.redis.pass}")
private String redisPass;
/*
Redis 连接工厂
*/
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
RedisClusterConfiguration configuration = new RedisClusterConfiguration(redisHosts); // Redis 集群配置
configuration.setPassword(RedisPassword.of(redisPass)); // 设置密码
return new LettuceConnectionFactory(configuration);
}
/*
RedisTemplate
*/
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
RedisTemplate template = new RedisTemplate();
template.setConnectionFactory(factory); // 设置 Redis 连接工厂
return template;
}
}
2.2 Redis操作
这里做了两个操作,一个是Redis基本的value操作,set和get,另一个是队列数据结构
就是这么简单,一个RedisTemplate支持所有的操作,肥肠神奇方便
package com.chinatelecom.flydragon.redis;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class Operation {
@Resource(name="redisTemplate")
private ValueOperations<String, String> valueOps;
public void value() {
valueOps.set("蔬菜", "土豆");
System.out.println(valueOps.get("蔬菜"));
}
@Resource(name="redisTemplate")
private ListOperations<String, String> listOps;
public void list() {
listOps.leftPush("食物", "榴莲");
listOps.rightPush("食物", "烤羊排");
listOps.leftPush("食物", "拿破仑");
System.out.println(listOps.range("食物", 0, -1));
}
}
写个测试调用一下,完美