缓存中间件Redis
简介
Redis(Remote Dictionary Server)是一个基于内存的 Key-Value 结构化存储的存储系统。在实际生产环境中可以将其作为数据库、缓存和消息中间件来使用。
由于 Redis 是基于内存的、采用 Key-Value 结构化存储的 NoSQL 数据库,加上其底层采用单线程和多路 I/O 复用模型,所以 Redis 的查询速度很快。根据 Redis 官方提供的数据,它可以实现每秒查询的次数达到10万次,即 QPS 为100000+,这在某种程度上足以满足大部分的高并发请求。
三个特点:
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供strings(字符串),list(列表),set(集合),zset(有序集合),hash(哈希)等数据结构的存储(支持多种数据结构)。
- Redis支持数据的备份,即 master-slave 模式的数据备份。
Redis 的4种典型应用场景
1、热点数据的存储与展示
- “热点数据”可以理解为大部分用户频繁访问的数据,这些数据对于所有的用户来说,访问将得到同一个结果,比如“微博热搜”(每个用户在同一时刻的热搜是一样的),如果采用传统的“查询数据库”的方法获取热点数据,将大大增加数据库的压力,而降低数据库的读写性能。
2、最近访问的数据
- 用户最近访问过的数据记录在数据库中将采用“日期字段”作为标记,频繁查询的实现是采用该日期字段与当前时间做“时间差”的比较查询,这种方式是相当耗时的。而采用 Redis 的 List 作为“最近访问的足迹”的数据结构,将大大降低数据库频繁的查询请求。
3、并发访问
- 对于高并发访问某些数据的情况,Redis可以将这些数据预先装载在缓存中,每次高并发过来的请求则可以直接从缓存中获取,减少高并发访问给数据库带来的压力。
4、排名
- “排行榜”在很多互联网产品中也是比较常见的。采用Redis的有序集合(Sorted Set)可以很好地实现用户的排名,避免了传统的基于数据库级别的Order By及Group By查询所带来的性能问题。
除此之外,Redis还有诸多应用场景,比如消息队列、分布式锁等。
Redis 的使用
常用的几个命令:
1)查看Redis缓存中存储的所有key
keys*
2)在缓存中创建一个key,设置其名字为redis:order:no:10011(按照自己的习惯取名即可,但是建议最好具有某种含义),设置其值为10011,命令为:
set redis:order:no:1001110011。
3)查看缓存中指定 key 的取值,如获取刚刚创建的key:redis:order:no:10011的取值,命令为:
get redis:order:no:10011
4) 删除缓存中指定的 key, 如删除 key: redis:order:no:10011, 命令为 :
del redis:order:no:10011。
执行命令之后,如果返回值为1,则代表删除成功。
exists key 判断某个key是否存在
type key 查看你的key是什么类型
expire key 10 10秒钟:为给定的key设置过期时间
ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
select 命令切换数据库
dbsize 查看当前数据库的key的数量
flushdb 清空当前库
flushall 通杀全部库
两个核心操作组件 StringRedisTemplate 及 RedisTemplate 的自定义注入配置
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedis
Serializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
//通用化配置
@Configuration
public class CommonConfig {
//Redis连接工厂
@Autowired
private RedisConnectionFactory redisConnectionFactory;
//缓存操作组件RedisTemplate的自定义配置
@Bean
public RedisTemplate<String,Object> redisTemplate(){
//定义RedisTemplate实例
RedisTemplate<String,Object> redisTemplate=new RedisTemplate
<String, Object>();
//设置Redis的连接工厂
redisTemplate.setConnectionFactory(redisConnectionFactory);
//TODO:指定大Key序列化策略为String序列化,Value为JDK自带的序列化策略
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
//TODO:指定hashKey序列化策略为String序列化-针对hash散列存储
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
//缓存操作组件StringRedisTemplate
@Bean
public StringRedisTemplate stringRedisTemplate(){
//采用默认配置即可-后续有自定义配置时则在此处添加即可
StringRedisTemplate stringRedisTemplate=new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
return stringRedisTemplate;
}
}
还没有评论,来说两句吧...