Redis是什么?
Redis(Remote Dictionary Server)远程字典服务,是一个开源的使用ANSI C语言编写、支持网路、可基于内存也可持久化的日志型,key-value(NoSql---->non-relational)数据库
Redis的特点?
- 性能极高,基于内存,读的速度是11万次/s,写的速度是81千次/s
- 丰富的数据类型,支持string、hash、list、set、zet多种数据类型
- 原子性,所有操作都是原子性的,支持事务
- 丰富的特性,支持发布订阅、通知、过期策略等
- 支持持久化,可以将内存中的数据保存在硬盘中,重启后再次加载
- 支持分布式,理论上可以无限扩展
- 单线程,没有线程并发问题
Redis的应用场景?
- 缓存
- 分布式锁
- 分布式session
- 消息队列
Redis的安装?
Linux安装
yum -y install gcc
cd /usr/local
wget http://download.redis.io/releases/redis-3.2.5.tar.gz
tar -xvf redis-3.2.5.tar.gz
mv redis-3.2.5 redis
cd redis
修改配置文件
vi redis.conf
修改
#bind 127.0.0.1 去掉本机ip,让其他机器访问
protected mode no 关闭保护模式
Windows安装
从redis.io官网下载压缩包,解压后就完成了安装
Redis的数据类型?
- string
- hash
- list
- set
- zset
Redis的事务?
- multi 启动事务
- exec 提交事务
- discard 放弃事务
- watch 监视一个或多个键,如果有其他客户端修改键值,事务将失败
Redis开发
编程式缓存
1)导入redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2)添加配置文件
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.database=0
spring.redis.jedis.pool.max-active=100
spring.redis.jedis.pool.max-wait=100ms
spring.redis.jedis.pool.max-idle=100
spring.redis.jedis.pool.min-idle=10
3)配置类
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(factory);
// 配置序列化器
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);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson序列化器
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
4)使用RedisTemplate
常用方法:
- ValueOperations opsForValue() 获取String类型的操作对象
- HashOperations opsForHash() 获取hash类型的操作对象
ValueOperations操作对象
- set(key,value) 保存key-value
- Object get(key) 读取value
使用缓存的步骤
- 先查询缓存
- 如果查不到直接返回
- 如果查不到,查询数据库
- 数据库查到,保存缓存中
- 数据库查不到返回null
声明式缓存
1)在配置类上添加注解
@EnableCaching
2)在redis的配置类中添加方法
@Configuration
public class RedisConfig {
@Bean
public RedisCacheConfiguration provideRedisCacheConfiguration(){
//加载默认配置
RedisCacheConfiguration conf = RedisCacheConfiguration.defaultCacheConfig();
//返回Jackson序列化器
return conf.serializeValuesWith(
RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()));
}
}
3)缓存相关注解
- @CacheConfig 使用在Service类上,可以配置缓存名称,如:@CacheConfig(cacheNames="books")
- @Cacheable使用在查询方法上,让方法优先查询缓存
- @CachePut使用在更新和添加方法上,数据库更新和插入数据后同时保存到缓存里
- @CacheEvice使用在删除方法上,数据库删除后同时删除缓存
注意:缓存的实体类必须实现序列化接口,在配置类中配置序列化(2)
标签:缓存,spring,redis,基础知识,template,Redis,序列化 From: https://www.cnblogs.com/mmda-site/p/17578109.html