当前位置 : 主页 > 编程语言 > java >

Java整合Redis_Spring-Data操作Redis

来源:互联网 收集:自由互联 发布时间:2022-07-04
简介 Spring-Data-Redis是spring大家族的一部分,通过简单的配置访问Redis服务,对Reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了Redis各种操作、异常处理及序列化,支持

简介

Spring-Data-Redis是spring大家族的一部分,通过简单的配置访问Redis服务,对Reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了Redis各种操作、异常处理及序列化,支持发布订阅。

RedisTemplate介绍

Spring封装了RedisTemplate对象来进行对Redis的各种操作,它支持所有的Redis原生的api。

  • RedisTemplate中定义了对5种数据结构操作
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set

StringRedisTemplate与RedisTemplate

  • 两者的关系是StringRedisTemplate继承RedisTemplate。
  • 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
  • SDR默认采用的序列化策略有两种,一种是String的序列化策
    略,一种是JDK的序列化策略。
    StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

pom.xml添加依赖

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
<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>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

在application.properties中配置

#redis服务器连接地址
spring.redis.host=192.168.134.130
#redis服务器连接端口
spring.redis.port=6379
#连接池最大连接数
spring.redis.pool.max-active=8
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.pool.max-idle=8
#连接池中的最小空闲连接
spring.redis.pool.min-idle=0
#连接超时时间(毫秒)
spring.redis.timeout=30000

自定义序列化

package com.neu.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

/**
* @Author yqq
* @Date 2022/03/27 22:07
* @Version 1.0
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
//添加序列化机制
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}

使用redisTemplate进行各类型的CURD操作

package com.neu;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;

import java.util.Set;

@SpringBootTest
class SpringDataRedisApplicationTests {

@Autowired
RedisTemplate redisTemplate;

/**
* string操作
*/
@Test
void contextLoads() {
//保存数据
redisTemplate.opsForValue().set("k1","v1");
//获取数据
redisTemplate.opsForValue().get("k1");
}
/**
* list操作
*/
@Test
void listTest(){
//添加元素
redisTemplate.opsForList().rightPush("l1","v1");
redisTemplate.opsForList().rightPush("l2","v2");
//获取元素
System.out.println(redisTemplate.opsForList().rightPop("l1"));
}
/**
* hash操作
*/
@Test
void hashTest(){
//添加hash元素
redisTemplate.opsForHash().put("user","name","科比");
redisTemplate.opsForHash().put("user","age",18);
//获取元素
String o = (String) redisTemplate.opsForHash().get("user", "name");
System.out.println(o);
}
/**
* set操作
*/
@Test
void setTest(){
//添加元素
redisTemplate.opsForSet().add("s1","v1");
redisTemplate.opsForSet().add("s1","v1");
redisTemplate.opsForSet().add("s1","v2");
//获取元素
Set s = redisTemplate.opsForSet().members("s1");
for (Object o:s){
System.out.println(o);
}
//获取set集合的长度
System.out.println(redisTemplate.opsForSet().size("s1"));
}
/**
* zset操作
*/
@Test
void zsetTest(){
//添加元素
redisTemplate.opsForZSet().add("z1","z1",67);
redisTemplate.opsForZSet().add("z1","z2",68);
redisTemplate.opsForZSet().add("z1","z3",88);
//获取元素
// Set z1 = redisTemplate.opsForZSet().range("z1", 0, -1);
Set z1 = redisTemplate.opsForZSet().rangeByScore("z1",50,80);
for (Object o:z1){
System.out.println(o);
}
}
}


【转自:美国高防站群服务器 http://www.558idc.com/mggfzq.html 复制请保留原URL】
上一篇:面试题-Java中级篇(12)
下一篇:没有了
网友评论