对Redis的理解
Redis是一款开源的高性能键值对存储系统,支持多种数据类型,如字符串、哈希、列表、集合、有序集合等。主要用于缓存、消息队列、排行榜、计数器等场景,能够提供快速读写、高并发、持久化等功能。
Redis是单线程的,通过采用多路I/O复用模型以及非阻塞I/O来实现高并发访问。同时,支持主从复制和Sentinel模式实现高可用,支持Cluster模式实现分布式,支持Lua脚本扩展功能。
Redis的内存管理是通过引用计数机制来实现的,同时支持简单动态字符串、快速列表等优化方式。为了避免数据过期后内存仍然占用的问题,Redis支持定时删除和惰性删除两种方式,并且支持持久化机制,包括RDB和AOF两种方式,可以根据具体业务常见选择合适的方式。
总之,Redis具有高性能,可扩展、可靠性、灵活性等优点,被广泛应用于互联网企业的后端存储中。
Redis的数据类型
字符串(String):最基本的数据类型,可以存储字符串、整数或浮点数。
列表(list):由多个字符串组成的有序列表,支持从两端进行元素的添加、删除等操作
集合(set):由多个字符串组成的无序集合,支持集合的交、并、差等操作
有序集合(sorted set):由多个字符串及其对应的分数组成的有序集合,支持按照分数进行范围查询、排名等操作
哈希表(hash):由多个字段和值组成的散列表,可以存储对象等复杂结构
这些数据类型各自具有特定的功能和适用场景,可以根据具体的需求选择合适的数据类型进行存储和操作。在使用Redis时,需要根据数据类型的不同选择合适的命令进行操作,如GET/SET命令用于字符串类型的读写操作,LPUSH/RPOP命令用于列表类型的插入和弹出操作,SADD/SMEMBERS命令用于集合类型的添加和获取操作,ZADD/ZRANGE命令用于有序集合类型的添加和范围查询操作,HSET/HGETALL命令用于哈希表类型的添加和获取操作等等。
Redis淘汰机制
指在Redis的内存使用达到了最大限制时,Redis需要淘汰一些键值对,以释放内存空间。
LUR(最近最少使用),Redis默认使用的淘汰机制:优先淘汰最近最少使用的键值对。Redis维护一个访问计数器,每次访问一个键值对时,就将该键值对的计数器加1。当需要淘汰键值对时,选择访问次数最少的键值对进行淘汰。
LFU(最不经常使用)淘汰机制:优先淘汰最近最少使用的键值对,即在一段时间内被访问次数最少的键值对。
TTL(生存时间)淘汰机制:优先淘汰过期时间最早的键值对,即距离过期时间最近的键值对
随机淘汰机制:Redis会随机选择一些键值对进行淘汰
可以通过配置文件或者命令行参数来设置其他的淘汰机制。Redis还提供了一些手动淘汰命令