redis基本操作 & redis序列化 & @Cache
配置
特点
- 数据持久化
- String, list, set, hash, zset(ordered sets)数据类型丰富
- 数据备份,支持master-slave模式的数据备份
- 原子操作,支持事务(也是原子操作)
- 性能高 11w/s读, 8w1/s写
- 在磁盘格式方面是紧凑的以追加的方式产生的,并不需要进行随机访问
访问
> redis-cli // 直接就能访问数据库0
> redis-cli --raw // 可以在cli工具中查看中文 而不是看到 /6x/8d 之类的编码
SpringBoot中使用redis
- 在Config类中配置redis:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
//设置key的序列化和反序列化类型 采用StringRedisSerializer
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
//设置value的序列化和反序列化类型 采用GenericJackson2JsonRedisSerializer
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
@Bean
@ConditionalOnMissingBean(name = "stringRedisTemplate")
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
return stringRedisTemplate;
}
}
- 如果要使用redisTemplate<String, Object> (Object可以替换成自定义的类,例如User,但是需要序列化的实体类)
public class User implements Serializable {
private String name;
private String password;
private String email;
private String address;
// setter and getter
}
- 使用的时候直接用
@RestController
public class redisController {
@Autowired
RedisTemplate<String, Object> redisTemplate;
@RequestMapping(value = "/set", method = RequestMethod.GET)
public void setRedisHash(@RequestParam(name = "key") String key, @RequestParam(name = "value") String value) {
User user = new User();
user.setName(value);
redisTemplate.opsForValue().set(value, user);
}
@RequestMapping(value = "/setString", method = RequestMethod.GET)
public void setRedisString(@RequestParam(name = "key") String key, @RequestParam(name = "value") String value) {
redisTemplate.opsForValue().set(key, value); // 如果key值重复了,那么将用现在的value覆盖掉以前的内容
}
@RequestMapping(value = "/get", method = RequestMethod.GET)
public Object getRedisHash(@RequestParam(name = "value") String value) {
return redisTemplate.opsForValue().get(value);
}
@GetMapping(value = "/test")
public Object testRedisHash(@RequestParam(name = "value") String value) {
Object object = redisTemplate.opsForValue().get(value);
if (object == null) {
System.out.println("value not exists");
return "value";
}
return redisTemplate.opsForValue().get(value);
}
}
- redis 命令行中部分操作
// 进入redis命令行
> redis-cli -h 127.0.0.1 -p 6379
// 切换db
> select 1
// 查看所有key
> keys *
// 清除当前db所有键
> flushdb
> flushall // 清除所有
具体操作在这个链接:Redis的基本操作 可以说是非常的具体了
springboot整合spring @Cache和Redis
这是一个使用redis缓存的文章,内容中不涉及缓存时间,但是基本给出了redis @cache的使用方法,以下给出了缓存配置文件,可以根据配置给出缓存配置文件来改变缓存配置:
@Configuration
public class CacheConfig extends CachingConfigurerSupport {
@Resource
private RedisConnectionFactory factory;
/**
* 自定义生成redis-key
*
* @return
*/
@Override
@Bean
public KeyGenerator keyGenerator() {
return (o, method, objects) -> {
StringBuilder sb = new StringBuilder();
sb.append(o.getClass().getName()).append(".");
sb.append(method.getName()).append(".");
for (Object obj : objects) {
sb.append(obj.toString());
}
System.out.println("keyGenerator=" + sb.toString());
return sb.toString();
};
}
@Bean
@Override
public CacheResolver cacheResolver() {
return new SimpleCacheResolver(cacheManager());
}
@Bean
@Override
public CacheErrorHandler errorHandler() {
// 用于捕获从Cache中进行CRUD时的异常的回调处理器。
return new SimpleCacheErrorHandler();
}
@Bean
@Override
public CacheManager cacheManager() {
RedisCacheConfiguration cacheConfiguration =
defaultCacheConfig()
.entryTtl(Duration.ofSeconds(60 * 2)) // 设置ttl 2min 根据duration来设置
.disableCachingNullValues()
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
return RedisCacheManager.builder(factory).cacheDefaults(cacheConfiguration).build();
}
}