Redis学习(一)

基本理论知识。

1.Redis作用定位

        关系型数据库不适用于超大规模、高并发的项目,是由于每次请求都需要I/O读取数据,速度必然不会太快(中小型没有高并发需求的项目不太需要考虑这个问题)。为了提高效率满足需求,则将数据放在内存,每次数据调用无需读取外存,速度大大提高。

        Redis是非关系型数据库,首次从数据库调用数据,同时Redis将数据缓存在内存,下次再调用相同的数据就可以从内存直接调用。注意,需保证Redis和Mysql的数据一致性

        Redis是单线程原子操作,可类比操作系统中的进程“并发”概念,升级后的Redis微观上仍是原子操作,只不过宏观上显得同步执行而已。

2.数据类型

2.1 String类型

        String是字符串类型,是最基本的数据类型。由于其原子性操作特征(原子操作不可再分割,要么完全执行,要么完全不执行,不存在中间状态,因此在执行过程中不会因为任何中断而被割裂),适合用作计数器和存储登录 Session 的共享数据。

应用①:计数器(eg 网页访问计数、商品数量计数等)

INCR→原子自增

DECR→原子自减

应用②:登录 Session 共享

        当用户登录后,使用String 类型来存储 Session 数据,确保用户在访问不同应用实例时。能够维持登录状态,实现多个应用实例之间共享用户的登录状态(Session)。

        用户登录时,服务器生成一个唯一的 Session ID,并将其作为键,将用户信息序列化为字符串作为值存储到 Redis 中→Session ID 被发送给用户的浏览器,浏览器在后续的请求中会携带这个 Session ID→多个应用实例可以通过检查 Redis 中的 Session ID 来验证用户的登录状态,实现 Session 的共享。

2.2 Hash类型

每个Hash有一个键(Key)、若干字段(Field)及对应的值(Value)。

键(Key):Hash 的唯一标识符。

字段(Field):Hash 内部的键,用于存储具体的数据。

值(Value):与字段相关联的值。

2.3 List类型

        List 类型是一个双向链表,可以存储一系列的值,这些值可以是字符串或数字。List 允许重复的值,并且可以进行多种操作,如从两端推入或弹出元素、索引特定元素、获取子列表等。

应用:用户收藏文章列表

        每篇文章可以用一个唯一的标识符(比如文章ID)来表示,将每个用户收藏的文章ID存储在一个列表中。

2.4 Set类型

        Set类型存储的数据是无序的,且不可重复,提供了丰富的操作,比如添加、删除、判断元素是否存在、获取集合大小、进行集合间的运算(交集、并集、差集)等。

应用:

①去重-需要存储一组唯一的元素时,比如用户标识、邮箱地址等,可以使用Set来自动去重。

②抽奖-将所有参与者的标识符添加到Set中,然后使用spop命令随机选择一个幸运者。

2.5 ZSet类型

        因为允许将一个唯一的分数(或称排序权重)与每个元素关联,所以有排序效果。

应用:实时排序(排行榜系统、时间线等)

3. key、value设计

3.1 Value

法1:①是否要排序。是→sort set;否→②

②多个值,数据重复→list、数据不重复→set

③单个值,简单数据→string、对象→hash

法2:①要排序→sort set ②剩下用string

3.2 Key

①唯一性→使用缓存数据的主键为key

②可读性→加可读性前缀(设计要规范)

③灵活性【后续应用再说明】

④时效性→设置时间限制

4. 持久化机制

        Redis 提供了两种主要的持久化机制:RDB(Redis Database)和 AOF(Append Only File),以及它们的混合持久化。

4.1快照方式-RDB(Redis Database Backup)

将 Redis 内存中的数据在某个时间点完整地保存为一个二进制快照文件(.rdb 文件),这种方式生成的文件大小相对较小,存储格式紧凑。

优点:

①高效备份:生成的 RDB 文件体积较小,备份更快,占用的存储空间也更少

②快速传输:由于文件小,RDB 文件可以通过网络快速传输到远程备份服务器或云端,适合异地容灾备份的需求

③恢复时间短:加载一个 RDB 文件直接将 Redis 恢复到某个时间点的数据状态,比 AOF 回放所有操作记录的方式恢复速度要快得多,适合需要快速恢复系统的场景。

缺点:

①做不到秒级持久化

②RDB版本不同易引起兼容问题

触发方式:

①手动触发

·SAVE 命令

SAVE 命令会立即在 Redis 主进程中执行同步持久化操作,将当前内存中的数据保存为 .rdb 文件。

        该命令会阻塞 Redis 主进程,直到持久化操作完成。在此期间,Redis 将无法处理任何其他请求。

        适用于小规模的数据量或在非高并发的情况下手动执行备份。通常不推荐在生产环境中使用。

·BGSAVE 命令

        BGSAVE 命令是非阻塞的,它会触发 Redis fork 一个子进程,子进程负责生成 RDB 文件,而主进程继续处理客户端请求。

特点:

        异步执行,不会阻塞 Redis 主进程,Redis 可以继续处理其他命令;

        适用于生产环境,在高并发下需要手动触发快照生成时使用,确保系统的性能不受影响。

②自动触发

基于 Redis 配置文件(redis.conf)中的 save 参数。该参数定义了在一定的时间范围内如果满足指定的条件(发生了多少次写操作),就会自动触发 RDB 持久化操作。

4.2 AOF(Append Only File)

        AOF以独立日志的方式记录每次写命令并将其追加到 AOF 文件中。

优点:

①安全性高,即使突然断电,AOF文件未损坏,数据丢失的机会很小

③AOF太大时,会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集,这个过程称为AOF重写。

缺点:

①同数据量下,AOF体积大于RDB,占更大的内存空间

②由于体积大,AOF比RDB慢

4.3 RDB-AOF混合方式

        RDB作全量备份(先把当前数据以RDB形式写入文件的开头)+ AOF作增量备份(后续操作命令以AOF的格式存入文件)

5. 内存淘汰机制(内存空间达到上限)

5.1 TTL:提前淘汰设置了过期时间的数据

5.2 LRU:淘汰最近最少访问的数据(看时间)

5.3 LFU:淘汰一定时间内使用次数最少的(频次)

5.4 随机淘汰

6. 过期key处理

6.1惰性删除→过期直接删除

优:对CPU友好

缺:key长期不用会造成内存浪费

6.2定时删除→创建定时器,达到过期时间点删除

缺:额外让出CPU维护定时器

6.3定期删除→隔一段时间检查数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值