Einsatz von Jedis
Grundlegende Schritte zur Verwendung von Jedis:
① Abhängigkeiten einführen, um Jedis-Objekte zu erstellen,
② Verbindung herstellen
③ Verwenden Sie Jedis. Der Methodenname stimmt mit dem Redis-Befehl überein
④ Ressourcen freigeben
- Abhängigkeiten einführen
<!--Jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.3.1</version>
</dependency>
- Verbindung herstellen
// 测试链接
void SetUp(){
// 1.建立链接
jedis = new Jedis("192.168.197.129",6379);
// 2.密码认证
jedis.auth("123321");
// 3.选择库
jedis.select(0);
}
- Fügen Sie Daten vom Typ „String“ ein
void testString(){
String res = jedis.set("name", "byf");
System.out.println("res"+res);
String name = jedis.get("name");
System.out.println("name="+name);
}
- Verbindung lösen
// 释放资源
void tearDown(){
if(jedis!=null){
jedis.close();
}
}
- Vollständiger Code:
package com.robin.test;
import redis.clients.jedis.Jedis;
public class JedisDemo1 {
private Jedis jedis;
// 测试链接
void SetUp(){
// 1.建立链接
jedis = new Jedis("192.168.197.129",6379);
// 2.密码认证
jedis.auth("123321");
// 3.选择库
jedis.select(0);
}
// 测试String
void testString(){
String res = jedis.set("name", "byf");
System.out.println("res"+res);
String name = jedis.get("name");
System.out.println("name="+name);
}
// 释放资源
void tearDown(){
if(jedis!=null){
jedis.close();
}
}
public static void main(String[] args) {
JedisDemo1 demo1 = new JedisDemo1();
demo1.SetUp();
demo1.testString();
demo1.tearDown();
}
}
Jedis-Verbindungspool
PS:Jedis selbst ist Thread-unsicher und häufiges Erstellen und Zerstören von Verbindungen führt zu Leistungseinbußen, daher wird die Verwendung empfohlen Jedis-Verbindung Der Pool ersetzt die direkte Verbindungsmethode von Jedis.
package com.robin.test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* 使用JedisPool连接池
*/
public class JedisDemo2 {
private static final JedisPool jedisPool;
static {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 配置连接池参数
jedisPoolConfig.setMaxTotal(8); // 最大链接数
jedisPoolConfig.setMaxIdle(8); //最大空闲连接数
jedisPoolConfig.setMinIdle(8); // 最小空闲连接数
jedisPool = new JedisPool(jedisPoolConfig,"192.168.197.129",6379);
}
// 获取jedis对象
public static Jedis getJedis(){
return jedisPool.getResource();
}
}
SpringBoot integriert Jedis
Schnellstart
Schritte zur Verwendung von SpringDataRedis:
①Spring-Boot-Starter-Data-Redis-Abhängigkeit einführen
②Redis-Informationen in application.yml konfigurieren
③ RedisTemplate injizieren
- Abhängigkeiten einführen
<!-- redis-stater -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--common-pool redis连接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.11.1</version>
</dependency>
- Konfigurieren Sie Yaml-bezogene Redis-Konfigurationsinformationen
spring:
data:
redis:
host: 192.168.197.129 # redis服务IP
port: 6379 # 端口
password: 123321 # redis auth 认证密码
lettuce:
pool:
max-active: 8 # 最大连接数
max-idle: 8 # 最大空闲连接数
max-wait: 100ms # 最长等待时间
- Inject RedisTemplate-Testverwendung
@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private RedisTemplate<String,Object> redisTemplate;
@Test
void testString() {
redisTemplate.opsForValue().set("day","2023-11-28");
String day = (String)redisTemplate.opsForValue().get("day");
System.out.println(day);
}
}
Zwei Serialisierungsübungslösungen für RedisTemplate
redisTemplate
-
Standardbedingung
RedisTemplate kann jedes Objekt als Wert empfangen und in Redis schreiben, es wird jedoch , Standardmäßig wird die JDK-Serialisierung verwendet. (Das Byte-Format ist schlecht lesbar und beansprucht viel Speicher)
-
Passen Sie die Serialisierungsmethode von redisTemlate an
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory){
// 创建RedisTemplate 对象
RedisTemplate<String,Object> template = new RedisTemplate<>();
// 设置连接工厂
template.setConnectionFactory(connectionFactory);
// 创建json序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// 设置key的序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
// 设置value的序列化
template.setValueSerializer(jsonRedisSerializer);
template.setHashValueSerializer(jsonRedisSerializer);
// 返回 RedisTemplate
return template;
}
}
PS: Der Schlüssel ist auf String-Serialisierung und der Wert auf JSON-Serialisierung eingestellt.
@Test
void testSaveUser(){
redisTemplate.opsForValue().set("user:100",new User("zhangsan",21));
User o = (User)redisTemplate.opsForValue().get("user:100");
System.out.println(o);
}
Um den Typ des Objekts während der Deserialisierung zu kennen, schreibt der JSON-Serialisierer den Klassentyp der Klasse in das JSON-Ergebnis und speichert es in Redis, was zusätzlichen Speicheraufwand verursacht. " @class:“com.robin.redisdemo.pojo.user“ "
stringRedisTemplate
Verwenden Sie einheitlich den String-Serializer, der erfordert, dass nur Schlüssel und Werte vom Typ String gespeichert werden können. Wenn Java-Objekte gespeichert werden müssen, werden die Serialisierung und Deserialisierung der Objekte manuell durchgeführt.
(Spring stellt standardmäßig eine StringRedisTemplate-Klasse bereit, und ihre Schlüssel- und Werteserialisierungsmethode ist standardmäßig String. )< /span>
@SpringBootTest
class StringRedisTemplateTests {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Test
void testString() {
stringRedisTemplate.opsForValue().set("day","2023-11-28");
String day = (String)stringRedisTemplate.opsForValue().get("day");
System.out.println(day);
}
private static final ObjectMapper mapper= new ObjectMapper();
@Test
void testSaveUser() throws JsonProcessingException {
// 创建对象
User user = new User("zhangsan2", 21);
// 手动序列化
String json = mapper.writeValueAsString(user);
// 写入数据
stringRedisTemplate.opsForValue().set("user:200",json);
// 手动反序列化
User user1 = mapper.readValue(json, User.class);
String res = stringRedisTemplate.opsForValue().get("user:200");
System.out.println(res);
}
}