文档章节

springboot操作redis基础说明

圆梦巨人
 圆梦巨人
发布于 2017/05/15 18:11
字数 846
阅读 78
收藏 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
2018/09/26
0
0
SpringBoot注解方式整合Redis--最简单的实例

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

karma123
2018/07/04
0
0
【SpringBoot2.0系列08】SpringBoot之redis数据缓存管理

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

余空啊
2018/08/20
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官方将终止维护...

一刀
2018/09/16
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
19分钟前
0
0
思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
今天
6
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
今天
5
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
4
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部