本文已参与「新人创作礼」活动,一起开启掘金创作之路。
什么是Redis
redis: redis 即 Remote Dictionary Server,用中文翻译过来可以理解为远程数据服务或远程字典服务。其是使用 C 语言的编写的 key-value 存储系统。
Redis适用的场景
- 缓存:减轻MySQL的查询压力,提升系统的性能;
- 排行榜:利用Redis的sortset(有序集合)实现
- 计算器/限速器:利用Redis中原子性的自增操作,我们可以统计类似用户的点赞数、用户访问数等等。这类操作如果用MySQL,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个API的频率常用的有抢购时防止用户疯狂点击带来不必要的压力
- 好友关系:利用集合的一些命令,比如求交集、并集、差集等可以方便解决一些共同好友、共同爱好之类的功能;
- 消息队列:除了Redis自身发布/订阅模式我们可以使用list来实现一个队列机制,比如:到货通知、邮件发送之类的需求不需要高可靠,但是会打来非常大的DB压力完全可以用list来完成异步解耦
- Session共享:Session是保存在服务器文件中,如果是集群服务,同一个用户过来可能落在不同的机器上这就会导致用户频繁登录;采用Redis保存session后无论用户落在哪台机器上都能够获取到对应的session信息
Redis不适合的场景
数据量太大数据访问频率非常低的业务都不适合使用Redis,数据太大会增加成本访问频率太低保存在内存中纯属浪费资源
Redis有哪些数据类型?可以应用在什么场景
Redis总共有八种数据结构,五种基本的数据类型和三种特殊数据类型。
- 五种基本数据类型
- string :字符串类型,昂用来存储计数器,粉丝数等简单的分布式锁也会用到该类型
- hashmap:key-value形式的value是一个map
- list:基本的数据类型列表 。在Redis中可以吧list用作栈、队列、阻塞队列 。
- set:集合不能重复元素可以做点赞,收藏等
- zset:有序集合,不能有重复元素,有序集合中的每个元素都需要一个指定的分数,根据分数对元素进行圣墟排序可以做排行榜
- 三种特殊数据类型
- geospatial:Redis在哪3.2退出G类型,该功能可以推算出地理位置和,两地之间的距离
- hyperloglog:基数:数学上集合的元素个数,是不能重复的 。这个数据结构常用于统计网站的UV
- bitmap:bitmap就是通过最小的单位bit来进行0或1的设置表示某个元素对应的值或者状态 。 一个bit的值 ,或着是0,或者是1;也就说一个bit能存储的最多信息是2。bitmap常用于统计用户信息比如活跃粉丝和不活跃粉丝、登录或未登录、是否打卡等
Redis是单线程还是多线程的?
- redis 在4.0的时候引入了多线程来做大缓存的清楚处理工作 , 主要是体现在大数据的异步删除功能上 , 例如unlink key、flushen async、flushall async等, 先清除key , 接着异步删除对应的value。
- 在Redis6.0之前的网络模型都是标准的单线程reactor模式。在6.0开始引入了一个非标准的多线阿城reactor模型 , subreactor此时会使用socket读取client请求并处理命令的解析然后具体写还是在主线程上执行