您的位置:首页 > 数据库 > Redis

springboot操作redis基础说明

2017-03-30 00:00 489 查看
摘要: 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();
//            }
//        };
//    }

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


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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  springboot Redis Spring