springboot操作redis基础说明

软件环境:springboot 1.5.2,redis 3.2.1

配置

在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(); // } // }; // }

1@SuppressWarnings("rawtypes") 2@Bean 3public CacheManager cacheManager(RedisTemplate redisTemplate) { 4 RedisCacheManager rcm = new RedisCacheManager(redisTemplate); 5 //设置缓存过期时间 6 //rcm.setDefaultExpiration(60);//秒 7 return rcm; 8} 9 10/\*\* 11 \* redis模板配置 12 \* 13 \* @param factory 14 \* @return 15 \*/ 16@Bean 17public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { 18 StringRedisTemplate template = new StringRedisTemplate(factory); 19 //RedisTemplate序列化类设置 20 //json序列化 21 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); 22 ObjectMapper om = new ObjectMapper(); 23 om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); 24 om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON\_FINAL); 25 jackson2JsonRedisSerializer.setObjectMapper(om); 26 //value的序列化类 27 template.setValueSerializer(jackson2JsonRedisSerializer); 28 //hash的value的序列化类 29 template.setHashValueSerializer(jackson2JsonRedisSerializer); 30 template.afterPropertiesSet(); 31 return template; 32}

}

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);

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )