博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【过程记录】springboot整合redis/分别用redisRepository和redistemplate操作redis
阅读量:3903 次
发布时间:2019-05-23

本文共 4591 字,大约阅读时间需要 15 分钟。


导入依赖

菜单大部分情况下不会出现变化,我们可以将其放入Redis 加快加载速度

org.springframework.boot
spring-boot-starter-data-redis
org.apache.commons
commons-pool2

基本配置

redis: timeout: 10000ms # 连接超时时间 host: 192.168.10.100 # Redis服务器地址 port: 6379 # Redis服务器端口 database: 0 # 选择哪个库,默认0库 lettuce:  pool:  max-active: 1024 # 最大连接数,默认 8  max-wait: 10000ms # 最大连接阻塞等待时间,单位毫秒,默认 -1  max-idle: 200 # 最大空闲连接,默认 8  min-idle: 5 # 最小空闲连接,默认 0

使用RedisTemplate访问redis

RedisConfig.java

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;import org.springframework.data.redis.serializer.StringRedisSerializer;/*** Redis配置类** @author zhoubin* @since 1.0.0*/@Configurationpublic class RedisConfig {
@Beanpublic RedisTemplate
redisTemplate(LettuceConnectionFactoryredisConnectionFactory){
RedisTemplate
redisTemplate = new RedisTemplate<>();//为string类型key设置序列器redisTemplate.setKeySerializer(new StringRedisSerializer());//为string类型value设置序列器redisTemplate.setValueSerializer(newGenericJackson2JsonRedisSerializer());//为hash类型key设置序列器redisTemplate.setHashKeySerializer(new StringRedisSerializer());//为hash类型value设置序列器redisTemplate.setHashValueSerializer(newGenericJackson2JsonRedisSerializer());redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}}

修改菜单方法:

MenuServiceImpl.java

/*** 通过用户id获取菜单列表** @return*/@Overridepublic List
getMenusByAdminId() {
Integer adminId = ((Admin)SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId();ValueOperations
valueOperations =redisTemplate.opsForValue();//查询缓存中是否有数据List
menus = (List
) valueOperations.get("menu_" + adminId);if (CollectionUtils.isEmpty(menus)){
menus = menuMapper.getMenusByAdminId(adminId);valueOperations.set("menu_"+adminId,menus);}return menus;}

使用Redisrepository访问redis

需要声明一配置项用于启用Repository以及模板

public class RedisConfig {
@Bean public LettuceConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("127.0.0.1", 6567); redisStandaloneConfiguration.setPassword("password");//如果有密码需要通过这个函数设置密码 return new LettuceConnectionFactory(redisStandaloneConfiguration); }@Bean public JedisConnectionFactory jedisConnectionFactory(){
//如果使用jedis作为客户端也需要声明该bean 使用与上面的类似}@Bean public RedisTemplate
redisTemplate(){
RedisTemplate
template = new RedisTemplate<>(); RedisSerializer
stringSerializer = new StringRedisSerializer(); JdkSerializationRedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer(); template.setConnectionFactory(redisConnectionFactory()); template.setKeySerializer(stringSerializer); template.setHashKeySerializer(stringSerializer); template.setValueSerializer(stringSerializer); template.setHashValueSerializer(jdkSerializationRedisSerializer); template.setEnableTransactionSupport(true); template.afterPropertiesSet(); return template; }}

实例:

entity

import lombok.Data;import lombok.experimental.Accessors;import org.springframework.data.redis.core.RedisHash;import org.springframework.data.redis.core.index.Indexed;@Accessors(chain = true)@Data@RedisHash(value="Student",timeToLive = 10)public class stu implements Serializable {
public enum Gender{
MALE,FEMALE } private String id; @Indexed private String name; private Gender gender; //RedisHash注解用于声明该实体将被存储与RedisHash中,如果需要使用repository的数据访问形式,这个注解是必须用到的 timetoLive为实体对象在数据库的有效期 //@Indexed用于标注需要作为查询条件的属性}

写接口

repository:

@Repositorypublic interface StuRepository extends CrudRepository
{
stu findByName(String name);//自定义查询方法,使用了@Indexed的name属性查询}

调用:

@SpringBootTestpublic class RedisApplicationTests {
@Autowired StuRepository stuRepository; @Test void testSave(){
stu student = new stu().setId("0002").setName("xiaoming").setGender(stu.Gender.FEMALE); stuRepository.save(student);//根据id更新或者新增记录 } @Test void testFindBy(){
//使用主键查询 assert stuRepository.findById("0002").isPresent(); //根据自定义方法查询 assert stuRepository.findByName("xiaoming") !=null; }}

转载地址:http://vxten.baihongyu.com/

你可能感兴趣的文章
4. 两个排序数组的中位数
查看>>
10. 正则表达式匹配
查看>>
23. 合并K个元素的有序链表
查看>>
32. 最长有效括号
查看>>
6. Z字形转换
查看>>
8. 字符串转整数(atoi)
查看>>
12. 整数转罗马数字
查看>>
15. 三数之和
查看>>
16. 最接近的三数之和
查看>>
18. 四数之和
查看>>
22. 括号生成
查看>>
24. 两两交换链表中的节点
查看>>
71. 简化路径
查看>>
77. 组合
查看>>
78. 子集
查看>>
89. 格雷编码
查看>>
刚开始学python,对脚本语言的一些理解
查看>>
matplotlib进行绘图——散点图
查看>>
matplotlib进行绘图——直方图
查看>>
需求文件requirements.txt的创建及使用
查看>>