Redis
是一款key-value存储结构的内存级NoSQL数据库
- 支持多种数据格式
- 支持持久化
- 支持集群
- 存取速度快
- 操作具有原子性,两个客户端并发访问,Redis服务器能接受更新后的值
下载地址:https://github.com/tporadowski/redis/releases
基本使用
启动服务端 redis-server.exe
启动客户端 redis-cli
set name zty //设置值
get name //获取值"zty"
//hashset 方式存储 在key里边存储多个key
hset keya a aaa
hset keya b bbb
hget keya a //获取keya 里边a 的值 “aaa”
hget keya a //获取keya 里边b 的值 “bbb”
key * //查询所有key
EXPIRE name 10 //设置过期时间10秒
EXISTS name //判断是否存在
move name //移除当前key
spring boot 整合redis
//导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
//配置application.yaml
spring:
redis:
host: localhost
port: 6379
//测试
@Resource
private RedisTemplate redisTemplate ;
@Test
void set() {
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set("name","zty");
}
@Test
void get() {
ValueOperations valueOperations = redisTemplate.opsForValue();
System.out.println( valueOperations.get("name"));
}
@Test
void hset() {
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("info","hobby","codding");
}
@Test
void hget() {
HashOperations hashOperations = redisTemplate.opsForHash();
Object o = hashOperations.get("info","hobby");
System.out.println(o);
}
lettus和jedis的区别:
spring boot默认使用lettus客户端连接redis
- jedis连接redis服务器是直连模式,当多线程下使用jedis会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用,这样整体性能就大受影响
- lettus基于Netty框架进行与Redis服务器连接,底层设计采用StatefulRedisConnection.StatefulRedisConnection自身是线程安全的,可以保障并发产生的安全问题,所以一个连接可以多个线程复用。也支持多连接实例一起工作
自定义RedisTemplate序列化机制
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<Object,Object> redisTemplate( RedisConnectionFactory redisConnectionFactory){
RedisTemplate<Object,Object> tpl = new RedisTemplate<Object,Object>();
tpl.setConnectionFactory(redisConnectionFactory); //使用json格式序列化对象,对缓存数据key和value进行转换
Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jsonRedisSerializer.setObjectMapper(om);
tpl.setDefaultSerializer(jsonRedisSerializer);
return tpl;
}
}