0
点赞
收藏
分享

微信扫一扫

SringBoot整合Redis


Spring整合redis

Spring Data 好处很方便操作对象类型。 把Redis不同值得类型放到一个opsForXXX方法中。

opsForValue : String值

opsForList : 列表List

opsForHash: 哈希表Hash

opsForZSet: 有序集合Sorted Set

opsForSet : 集合

导入依赖

<!--redis启动器 其他不做描述--> 
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.6.4</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.4</version>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.6.4</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.6.4</version>
</dependency>

跟之前的架构一样,
这里只展示关键代码~

定义一个redis配置类

package com.gavin.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.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfigDemo {


/**
* @param factory
* @return RedisTemplate
* <p>
* RedisTemplate --简化 Redis 数据访问代码的助手类
* </p>
* RedisTemplate<K,V> 类型参数:
* K- 模板工作的 Redis 键类型(通常是字符串)
* V- 模板适用的 Redis 值类型
* 在给定对象和底层二进制数据之间执行自动序列化/反序列化 Redis 存储。
* 默认情况下,它对其对象使用JdkSerializationRedisSerializer 序列化。
* 对于字符串密集型操作,请考虑用 StringRedisTemplate.
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
/**
* 设置连接工厂~Redis连接的线程安全工厂。
*/
template.setConnectionFactory(factory);

/**设置key~字符串序列化方式
* StringRedisSerializer
* 简单的 String到 byte[] (和返回)序列化程序。
* 转换 Strings 使用指定的字符集(默认为 UTF-8)转换为字节,反之亦然。
* 当与 Redis 的交互主要通过字符串发生时很有用。
* 不执行任何 null 转换,因为空字符串是有效的键/值
*/
template.setKeySerializer(new StringRedisSerializer());

/**Jackson2JsonRedisSerializer
* 读取和写入 JSON 格式 对象
* 转换器可用于绑定到类型化的 bean,或非类型化的 HashMap实例。
* 注意: Null 对象被序列化为空数组,反之亦然。
*/
template.setValueSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class));
return template;
}
}

服务实现

package com.gavin.service.impl;

import com.gavin.mapper.GoodsMapper;
import com.gavin.pojo.Goods;
import com.gavin.service.redisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.stereotype.Service;

@Service
public class redisServiceImpl implements redisService {

@Autowired
private GoodsMapper goodsMappper;
@Autowired
private RedisTemplate<String, Object> redisTemplate;

@Override
public Goods selectById(Integer id) {
// 先从redis中获取数据
String key = "Goods:" + id;
if (redisTemplate.hasKey(key)) {
System.out.println("执行缓存查找");
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Goods>(Goods.class));
Goods goods = (Goods) redisTemplate.opsForValue().get(key);
return goods;
}
System.out.println("执行了mysql");
Goods goods = goodsMappper.selectByPrimaryKey(id);

//将数据放入redis
// redisTemplate.opsForValue()返回对值的操作
redisTemplate.opsForValue().set(key,goods);
return goods;
}
}

controller层

import com.gavin.pojo.Goods;
import com.gavin.service.redisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

/**
* @author Gavin
*/
@Controller
public class RedisController {
@Autowired
private redisService redisService;

@RequestMapping("/goods")
public String selectById(Integer id, Model model) {

Goods goods = redisService.selectById(id);
model.addAttribute("goods",goods);
return "index";
}
}

application.yml

spring:
#配置数据源
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/gavin
username: gavin
password: 955945
#单机版redis设置
redis:
host: 192.168.135.145
port: 6379
# redis集群配置
redis:
cluster:
nodes: 192.168.135.145:6789,192.168.135.145:6790,192.168.135.145:6791,192.168.135.145:6792,192.168.135.145:6793,192.168.135.145:6794

mybatis:
#mapper位置
mapper-locations: classpath:/com.gavin.mapper/*.xml
#实体类别名
type-aliases-package: com.gavin.pojo

SringBoot整合Redis_firefox


返回list集合

//list集合
@Override
public List<Goods> selectAllGoods() {
String key="goodsInfo";
if (redisTemplate.hasKey(key)){
System.out.println("redis缓存中已找到");
redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<List>(List.class));
List<Goods> goodsInfo = (List<Goods>)redisTemplate.opsForValue().get("goodsInfo");
return goodsInfo;
}
System.out.println("执行了 mysql");
List<Goods> goodsInfo = goodsMappper.selectAll();
redisTemplate.opsForValue().set(key,goodsInfo);

return goodsInfo;
}

SringBoot整合Redis_redis_02


举报

相关推荐

0 条评论