文档章节

springboot操作redis基础说明

圆梦巨人
 圆梦巨人
发布于 2017/05/15 18:11
字数 846
阅读 68
收藏 1

springboot操作redis基础说明

配置

在application.properties,增加redis的配置,主要配置项包括redis的ip,端口,密码等,具体如下:

# redis
# Redis数据库索引(默认为0)
spring.redis.database=0  
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379  
# Redis服务器连接密码(默认为空)
spring.redis.password=123456
# 连接池最大连接数(使用负值表示没有限制)
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=0

编码

全局配置

在任意包(package)下添加类

/**
 * redis缓存配置
 */
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

//    @Bean
//    public KeyGenerator keyGenerator() {
//        return new KeyGenerator() {
//            @Override
//            public Object generate(Object target, Method method, Object... params) {
//                StringBuilder sb = new StringBuilder();
//                sb.append(target.getClass().getName());
//                sb.append(method.getName());
//                for (Object obj : params) {
//                    sb.append(obj.toString());
//                }
//                return sb.toString();
//            }
//        };
//    }

    @SuppressWarnings("rawtypes")
    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
        //设置缓存过期时间
        //rcm.setDefaultExpiration(60);//秒
        return rcm;
    }

    /**
     * redis模板配置
     *
     * @param factory
     * @return
     */
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        //RedisTemplate序列化类设置
        //json序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        //value的序列化类
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //hash的value的序列化类
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

 

redis序列化类说明(关键!!)

根本上来说,redis只能保存字符串。如果要保存对象(javabean),就需要序列化,所以要设置序列化的类

在上方代码的redisTemplate方法中,其中有一行

//value的序列化类
template.setValueSerializer(jackson2JsonRedisSerializer);

这是设置对value的序列化类的设置,当value的类型不是string时,就会用他做序列化

下面还有一行

//hash的value的序列化类
template.setHashValueSerializer(jackson2JsonRedisSerializer);

通过名字可以看出是对HashValue的序列化,那HashValue跟value有什么区别?这涉及到redis的几种数据类型,对于string和list类型,他们的整个值的结构是key和value,对于hash类型,结构就是key,hashKey,hashValue,所以setHashValueSerializer是设置hash结构的hashValue的

如果没有setHashValueSerializer,而在对hashValue赋值时传入了javabean,就会报错

具体操作

以下例子使用hash类型,场景是保存所有登录用户的信息,其中key固定是loginToken,hashKey是token(每个用户唯一随机生成的string),hashValue是一个叫LoginUser的类

 

在需要操作redis的类先添加RedisTemplate的注入

 

插入值

ops.put方法代表插入,3个参数分别对应key,hashKey,hashValue

在这里可以把key理解为表名,hashKey理解为表的id,hashValue就是一行的所有列的值

HashOperations<String, Object, Object> ops = redisTemplate.opsForHash();

//登录用户信息
LoginUser loginUser = new LoginUser();
loginUser.setToken(token);
loginUser.setUserName(userName);

//插入到redis
ops.put("LoginUser", token, loginUser);

 

检查key是否存在

ops.hasKey的两个参数,第一个是key,第二是hashKey

HashOperations<String, String, Object> ops = redisTemplate.opsForHash();

return ops.hasKey("LoginUser", token);

 

通过key获取值

ops.hasKey的两个参数,第一个是key,第二是hashKey,跟上面的检查差不多

HashOperations<String, String, LoginUser> ops = redisTemplate.opsForHash();

LoginUser loginUser = ops.get("LoginUser", token);

 

其他操作

设置有效时间

可以像session一样,设置一个有效时间,超过了自动删除

参数1是key,参数2是时间的值,参数3是时间单位,下面例子是30分钟的意思

redisTemplate.expire("LoginUser", 30, TimeUnit.MINUTES);

 

下图是本例子写入数据后的样子

© 著作权归作者所有

共有 人打赏支持
上一篇: 哈希算法
下一篇: * 图片压缩处理
圆梦巨人
粉丝 13
博文 176
码字总数 148989
作品 0
西城
程序员
私信 提问
SpringBoot 学习二:操作数据库

本文将从以下几个方面介绍: 前言 配置数据源 SpringBoot 整合 Mybatis SpringBoot 整合 JdbcTemplate SpringBoot 整合 Redis 前言 在上篇文章 SpringBoot 学习一 中已经学习了 SpringBoot的...

tsmyk0715
09/26
0
0
SpringBoot注解方式整合Redis--最简单的实例

参考网页 springboot中注解实现集成redis https://blog.csdn.net/a67474506/article/details/52608855 一些SpringBoot相关知识的讲解 SpringBoot开箱即用的体现--本质上是SpringBoot提前做好...

karma123
07/04
0
0
springBoot 搭建web项目(前后端分离,附项目源代码地址)

概述 该项目包含springBoot-example-ui 和 springBoot-example,分别为前端与后端,前后端分离,利用ajax交互。 前端html 技术: + + + + 该项目git地址:https://github.com/jiangcaijun/sp...

开源小菜鸟2333
2017/11/01
0
0
SpringBootBucket 2.0.4 发布,代号“傲娇的小二晶”

SpringBootBucket 自从1.0.0版本发布后就有好多人喜欢,目前码云上面star数量接近1.2k。上个月还收到了红薯签名的1000 star奖杯,这个我自己也觉得很惊讶。 由于SpringBoot 1.x官方将终止维护...

一刀
09/16
1K
4
【SpringBoot2.0系列08】SpringBoot之redis数据缓存管理

【SpringBoot2.0系列01】初识SpringBoot 【SpringBoot2.0系列02】SpringBoot之使用Thymeleaf视图模板 【SpringBoot2.0系列03】SpringBoot之使用freemark视图模板 【SpringBoot2.0系列04】Spr...

余空啊
08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《资治通鉴》读书笔记及阅读感悟2200字

《资治通鉴》读书笔记及阅读感悟2200字: 1.用夏桀,商纣暴虐昏君和商汤,周武王仁德明君做比较,因为人民归心,上天赐名要不然就永远要恪守臣节至死不渝。 又用商朝的微子取代纣王,商朝可以...

原创小博客
17分钟前
1
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
55分钟前
2
0
Docker搭建代码质量检测平台-SonarQube(中文版)

Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量。通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言...

Jacktanger
今天
2
0
Windows / Linux / MacOS 设置代理上网的方法汇总

本文汇总了 Windows / Linux / MacOS 设置代理上网的各种方法,总结如下: 1、设置系统代理(Windows、Linux、MacOS) 2、设置代理插件(Chrome、Chromium、Firefox、Opera、QQ等浏览器) 3、...

sunboy2050
昨天
4
0
自定义 Maven 的 repositories

有时,应用中需要一些比较新的依赖,而这些依赖并没有正式发布,还是处于milestone或者是snapshot阶段,并不能从中央仓库或者镜像站上下载到。此时,就需要 自定义Maven的<repositories>。 ...

waylau
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部