浅谈 Redis
2021/8/6 2:06:27
本文主要是介绍浅谈 Redis,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、简单介绍一下Redis
用C语言开发的非关系型数据库,数据存储在内存中,所以读写速度非常快。
常用于作缓存,还可用作分布式锁、消息队列。
提供了5种数据类型。
还支持持久化、事务等。
二、数据结构及使用场景
1. String
1.1 概述
类似于Map类型的键值对存储
1.2 场景
常用于缓存,或者计数的作用,如用户访问次数、热点文章的点赞转发数等
2.List
2.1 概述
Redis的List是一个双向链表,即支持反向查找和遍历
2.2 场景
简易消息队列等
3. Hash
3.1 概述
类似于HashMap,是一个String类型的field-value的映射表,适合存储对象,如商品信息等
3.2 场景
对象数据的存储,如实现购物车
4. Set
4.1 概述
类似于HashSet,Redis的Set也是一种无序、不重复的集合,可以实现交集、并集、差集操作等
4.2 场景
需要存放数据不能重复,获取多个数据的交/并/差集时,如共同关注、共同粉丝等
5. ZSet(Sortest Set)
5.1 概述
相比于Set类型数据结构增加了一个权重参数score,使集合中的元素按照score有序排列,还可以通过score的范围获取元素列表等
5.2 场景
需要对数据进行排序时,如排行榜等
三、Redis为什么不使用多线程
在4.0之后加入了对多线程的支持;
在6.0之前主要还是使用单线程;原因如下:
- 单线程容易实现且维护
- Redis的性能瓶颈不在CPU,在内存和网络限制
- 多线程可能引发死锁、线程上下文切换等问题
四、Redis6.0为什么引入了多线程
主要为了提高网络IO读写性能,但执行命令仍然是单线程,所以不用担心线程安全问题;
6.0默认禁用,只使用主线程,如需开启修改配置为:
io-thread-do-reads yes
开启多线程后,还需要配置线程数,否则不生效:
io-threads 4
五、Redis为什么需要给缓存设置过期时间
因为内存有限,会导致OOM;除了缓解内存消耗,其它场景有:短信验证码只在1分钟内有效,设置token有效时间等
六、Redis过期删除策略
1. 惰性删除
在取出key时进行过期检查,对CPU最友好,但可能造成太多过期key没被删除
2. 定期删除
每隔一段时间抽取一批key执行删除过期key操作,对内存更加友好
以上两种方式各有千秋,但还是可能存在漏掉很多过期key的情况,仍然会导致OOM
那么怎么解决呢?--那就是Redis的内存淘汰机制了,请看下面
七、Redis内存淘汰机制(策略)
- volatile-lru
从已设置过期时间的数据集中挑选最近最少使用的淘汰 - allkeys-lru
当内存不足以写入新数据时,淘汰最近最少使用的key - volatile-random
当内存不足以写入新数据时,从已设置过期时间的key中随机淘汰 - allkeys-random
当内存不足以写入新数据时,从所有key中随机淘汰 - volatile-ttl
从已设置过期时间的数据集中选择将要过期的淘汰 - no-eviction
禁止删除数据,内存不足时写入新数据会报错(一般不用)
八、Redis持久化
将内存中的数据写入磁盘,主要时为了重用数据,比如机器重启时恢复数据
1. RDB(快照持久化)
通过创建快照来获得存储在内存里的某个时间点上的副本,是Redis的默认持久化方式,配置如下:
save 900 1 save 300 10 save 60 10000
注:在1秒后,如果至少有900个key发生变化
2. AOF(追加文件持久化)
实时性更好,是目前主流方案,开启配置:
appendonly yes
开启AOF持久化后,每执行一条更改Redis中数据的命令,就将该命令写入磁盘中的AOF文件中,配置如下:
appendfsync always appendfsync everysec appendfsync no
always 每执行一条命令就持久化一次
everysec 每一秒进行一次持久化
no 由操作系统决定什么时候持久化
为了兼顾数据和写入性能,建议appendfsync everysec
,让Redis每秒同步一次AOF文件,性能几乎无影响,即使崩溃,只丢失一秒内的数据
七、Redis事务
可以通过MULTI
、EXEC
、DISCARD
、WATCH
等命令来实现事务;
使用MULTI
后可以输入多个命令,Redis不会立即执行这些命令,当调用EXEC
命令时执行;
Redis不支持roll back
这篇关于浅谈 Redis的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧
- 2024-12-04Redis入门:简单教程详解
- 2024-11-29Redis开发入门教程:从零开始学习Redis
- 2024-11-27Redis入门指南:快速掌握Redis基础操作