springboot操作redis基础说明
2017-03-30 00:00
489 查看
摘要: springboot,redis
软件环境:springboot 1.5.2,redis 3.2.1
redis序列化类说明(关键!!)
根本上来说,redis只能保存字符串。如果要保存对象(javabean),就需要序列化,所以要设置序列化的类
在上方代码的redisTemplate方法中,其中有一行
这是设置对value的序列化类的设置,当value的类型不是string时,就会用他做序列化
下面还有一行
通过名字可以看出是对HashValue的序列化,那HashValue跟value有什么区别?这涉及到redis的几种数据类型,对于string和list类型,他们的整个值的结构是key和value,对于hash类型,结构就是key,hashKey,hashValue,所以setHashValueSerializer是设置hash结构的hashValue的
如果没有setHashValueSerializer,而在对hashValue赋值时传入了javabean,就会报错
在需要操作redis的类先添加RedisTemplate的注入
在这里可以把key理解为表名,hashKey理解为表的id,hashValue就是一行的所有列的值
参数1是key,参数2是时间的值,参数3是时间单位,下面例子是30分钟的意思
下图是本例子写入数据后的样子
软件环境: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(); // } // }; // } @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,第二是hashKeyHashOperations<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);
下图是本例子写入数据后的样子
相关文章推荐
- springboot操作redis基础说明
- Linux基础操作2 文件操作命令以及系统文件说明:
- Linux下Redis的安装、配置操作说明
- java(优化六) java操作redis之基础篇
- Redis基础操作命令及对应的Python操作Redis方法
- EXECL的基础操作说明
- Python菜鸟之路:Python基础-操作缓存memcache、redis
- redis安装及基础操作(1)
- redis实战基础篇:redis的5种数据类型的基本操作
- redis基础简介(二)- hash(哈希)、set(集合)、sorted set(有序集合)以及键操作
- Redis 基础知识(5种数据类型基本操作)
- Redis 基本类型介绍与基础操作指令
- redis基础数据操作命令练习
- SpringBoot系列: Redis基础
- windows下redis基础操作与主从复制 从而 数据备份和读写分离
- Redis教程之基础-五种数据基本操作
- Redis的基础操作命令(二)
- Redisson操作Redis之基础篇
- C#操作Redis存储基础
- Linux安装Redis操作说明