• 缓存中间件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. 1)查看Redis缓存中存储的所有key
    2. keys*
    3. 2)在缓存中创建一个key,设置其名字为redis:order:no:10011(按照自己的习惯取名即可,但是建议最好具有某种含义),设置其值为10011,命令为:
    4. set redis:order:no:1001110011
    5. 3)查看缓存中指定 key 的取值,如获取刚刚创建的key:redis:order:no:10011的取值,命令为:
    6. get redis:order:no:10011
    7. 4) 删除缓存中指定的 key, 如删除 key: redis:order:no:10011, 命令为 :
    8. del redis:order:no:10011
    9. 执行命令之后,如果返回值为1,则代表删除成功。
    10. exists key 判断某个key是否存在
    11. type key 查看你的key是什么类型
    12. expire key 10 10秒钟:为给定的key设置过期时间
    13. ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
    14. select 命令切换数据库
    15. dbsize 查看当前数据库的key的数量
    16. flushdb 清空当前库
    17. 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 redisTemplate(){
    		//定义RedisTemplate实例
    		RedisTemplate redisTemplate=new RedisTemplate
    			();
    		//设置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;
    	}
    }

  • 相关阅读:
    使用 content-visibility 优化渲染性能
    【Java进阶】泛型和多线程
    linux 系统内存诊断
    C语言源程序解析程序
    切面编程@Aspect 获取 url参数 + requestBody参数
    图片拼图怎么做?这几种方法可以快速拼图
    一个”.java”源文件中是否可以包括多个类?有什么限制?(企业真题)
    I/O提升50%,长江存储发布PCIe4.0固态硬盘致态TiPlus7100
    esp32 idf 添加的compones找不到头文件
    JS中数组随机排序实现(原地算法sort/shuffle算法)
  • 原文地址:https://blog.csdn.net/weixin_45410366/article/details/126217883