Redis基础篇:初认识,来跟Redis混个脸熟

Github issues:https://github.com/littlejoyo/Blog/issues/

个人博客:https://littlejoyo.github.io/

微信公众号:Joyo说

redis

1.什么是Redis?

  • 记住Redis是一款键值对(key-value)形式的NoSql数据库,NoSql = not only Sql,高性能解决高并发的需求。由C语言开发。

  • redis是基于内存的,内存的读写速度非常快,对于数据的读取和写入比常见的关系型数据库快许多。

  • Redis广泛被应用于并发编程下,主要作用于缓存机制和分布式处理等领域,使系统性能以及并发得到优化。

2.什么是NoSql?

  • NoSql意为非关系型数据库,相对于关系型数据库具有更多的灵活应用场景。

  • NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。

  • NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

  • NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

3. NoSql的主要四种类型和代表性作品

  • 键值对数据库:Redis

  • 列存储数据库:HBase

  • 文档类型数据库:MongoDb

  • 图形数据库:Neo4J, InfoGrid, Infinite Graph

4.为什么Redis受欢迎?越来越多的人开始应用Redis?

  • 基于内存,数据读写速度快,单机Redis能处理10W+的请求

  • 单线程模型,避免了多线程频繁进行上下文切换的时间消耗

  • 支持多种数据结构

  • 基于非阻塞的多路复用IO机制

5.Redis支持什么数据结构?

  • 字符串类型:String

  • 哈希类型:Hash

  • 列表类型:List

  • 集合类型:Set

  • 有序集合类型:sort Set

  • Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub

  • 如果你还想加分,那你说还玩过Redis Module,像BloomFilter,RedisSearch,Redis-ML

Redis中文api参考1

Redis中文api参考2

6.Redis的应用场景

  • 数据缓存
  • 任务队列
  • 应用排行榜
  • 网站访问统计
  • 数据统计处理
  • 分布式集群架构中的分布式锁

7.Redis的数据持久化方式

  • RDB(快照)
  • AOF(追加式)
  • 无持久化
  • 同时使用RDB和AOF

8.Redis的两种持久化的对比

  • RDB持久化方式会在一个特定的间隔保存那个时间点的一个数据快照。(1小时或者半小时)

  • AOF持久化方式则会记录每一个服务器收到的写操作。在服务启动时,这些记录的操作会逐条执行从而重建出原来的数据。写操作命令记录的格式跟Redis协议一致,以追加的方式进行保存。

  • Redis的持久化是可以禁用的,就是说你可以让数据的生命周期只存在于服务器的运行时间里。

  • 两种方式的持久化是可以同时存在的,但是当Redis重启时,AOF文件会被优先用于重建数据。

  • RDB很适合用于做备份。你可以设定一个时间点对RDB文件进行归档,这样就能在需要的时候很轻易的把数据恢复到不同的版本。比起AOF,在数据量比较大的情况下,RDB的启动速度更快。

  • RDB最大的缺点:RDB容易造成数据的丢失。假设每5分钟保存一次快照,如果Redis因为某些原因不能正常工作,那么从上次产生快照到Redis出现问题这段时间的数据就会丢失了。

  • AOF比RDB可靠。你可以制定不同的fsync策略:不进行fsync、每秒fsync一次和每次查询进行fsync。默认是每秒fsync一次。这意味着你最多丢失一秒钟的数据。不会出现停电后数据丢失的情况。

  • AOF的缺点就是在相同的数据集下,AOF文件的大小一般会比RDB文件大。在某些fsync策略下,AOF的速度会比RDB慢。通常fsync设置为每秒一次就能获得比较高的性能,而在禁止fsync的情况下速度可以达到RDB的水平。

9.三种键过期策略

Redis是基于键值对的储存方式存放在内存中的,因此,及时对内存中的键值进行清理是非常有必要的

9.1 定时过期

  • 每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。

  • 该策略可以立即清除过期的数据,对内存很友好;

  • 但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。

9.2 惰性过期

  • 只有当访问一个key时,才会判断该key是否已过期,过期则清除。

  • 该策略可以最大化地节省CPU资源,却对内存非常不友好。

  • 极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。

9.3 定期过期

  • 每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。

  • 该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。

  • Redis中同时使用了惰性过期和定期过期两种过期策略。

10.Redis的淘汰策略

10.1 什么时候触发?

Redis的内存淘汰策略,是指当内存使用达到maxmemory极限时,需要使用LAU淘汰算法来决定清理掉哪些数据,以保证新数据的存入。

10.2 Redis默认的淘汰策略——LRU

  • Redis默认情况下就是使用LRU策略算法,LRU算法(least RecentlyUsed),最近最少使用算法,也就是说默认删除最近最少使用的键。

  • 要注意一点!Redis中并不会准确的删除所有键中最近最少使用的键,而是随机抽取3个键,删除这三个键中最近最少使用的键。

  • 那么3这个数字也是可以设置采样的大小,如果设置为10,那么效果会更好,不过也会耗费更多的CPU资源。

  • 对应位置是Redis配置文件中的maxmeory-samples进行设置。

10.3 Redis的maxmemory极限

  • 上面说到了当内存达到了maxmemory极限就会触发内存淘汰策略,maxmemory用来设置redis存放数据的最大的内存大小,一旦超出这个内存大小之后,就会立即使用LRU算法清理掉部分数据。

  • 对于64 bit的机器,如果maxmemory设置为0,那么就默认不限制内存的使用,直到耗尽机器中所有的内存为止。

  • 但是对于32 bit的机器,有一个隐式的闲置就是3GB。

10.4 Redis的数据淘汰策略

选择使用哪一种淘汰策略可以到配置文件修改maxmemory-policy字段

  • 1)noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。

  • 2)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。

  • 3)allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。

  • 4)volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。

  • 5)volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。

  • 6)volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。

10.5 缓存的清理过程

  • 1)客户端执行数据写入操作
  • 2)redis server接收到写入操作之后,检查maxmemory的限制,如果超过了限制,那么就根据对应的policy清理掉部分数据
  • 3)写入操作完成执行。

微信公众号

扫一扫关注Joyo说公众号,共同学习和研究开发技术。

关注我
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270