幾年前我用的還是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));
}
}
寫個測試調用一下,完美