Redis笔记(一)

是什么

[Remote Dictionary Server] 开源高性能键值对内存数据库

优点

  • 读的速度是110000次/s,写的速度是81000次/s
  • 支持AOF和RDB及混合持久化方式
  • 单个命令操作原子性,LUA操作整体原子性
  • 数据结构丰富
  • 支持主从,集群,哨兵等多种部署模式

缺点

  • 宕机有丢数据风险
  • 在线扩容困难

高性能原因

  • 基于内存
  • 高效的简单动态字符串(simple dynamic string,SDS)
  • 单线程处理命令
  • NIO通信

数据类型

字符串string:字符串、 整数、 浮点数;做简单的 键值对缓 存;最大512M
列表list:双端队列
散列表hash:MAP
无序集合set:支持交集、并集、差集
有序集合zset:根据分值排序

底层数据结构

摘自:https://juejin.cn/post/6844903936520880135
作者:TurboSnail

SDS

常数复杂度获取字符串长度
空间预分配和惰性空间释放策略,杜绝缓冲区溢出,减少修改字符串时带来的内存重分配次数
二进制安全
内存利用精确到缓存行

链表

双端链表:带有指向前置节点和后置节点的指针,获取这两个节点的复杂度为O(1)
无环:表头节点的prev和表尾节点的next都指向NULL,对链表的访问以NULL结束
链表长度计数器:带有len属性,获取链表长度的复杂度为O(1)
多态:链表节点使用 void*指针保存节点值,可以保存不同类型的值

哈希表

跳表SkipList

有序集合(Sorted Set)的底层实现之一[当如果有序集合包含的元素比较多,或者元素的成员是比较长的字符串时]

应用场景

string——短信验证 码,配置信息等
hash——商品详情, 个人信息详情,新闻详情等。
list——适合存储一些有序且数据相对固定的数据。异步队列rpush生产,blpop阻塞等待消费[pub/sub在没有消费者的时候会丢消息]
set——提供交集、并集、差集操作。例如:查找两个人 共同的好友等。
sortedset——top 10。延时队列,时间戳做score, 消息内容作为key,调用zadd来生产消息, 消费者使用zrangbyscore获取n秒之前的数据做轮询处理。

持久化

  • RDB:定时对全量内存数据产生单dump.rdb文件
    大数据集启动效率更高
    fork 子进程处理
    有丢失一段时间数据的风险
  • AOF:所有的命令行记录以 redis 命令请求协议的格式完全持久化存储为 aof 文件
    可配 appendfsync为always,持久化每次操作
    rewrite机制合并命令
    AOF 文件比 RDB 文件大
    大数据集启动效率较低
  • 混合
    优先加载AOF
    RDB后自动清除过期AOF

选择持久化

  1. 最大化保障数据不丢失:混合模式
  2. 业务可以承受数分钟以内的数据丢失:只RDB
  3. 不推荐只AOF
  4. 酌情不开启持久化

过期键删除策略

  • 惰性过期:仅当key被访问时才判断是否已过期,过期则清除
    节省CPU资源,内存有浪费
  • 定期过期:定时扫描expires字典中一定数量的key,并清除其中已过期的key
    通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果

expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中 的某个键的指针,value是该键的毫秒精度的UNIX时间戳表示的过期时间。键空间是指该 Redis集群中保存的所有键

内存淘汰策略

如果达到设置的内存上限,Redis的写命令会返回错误信息(但是读命令还可以正常返回。)或者适用以下配置的策略丢弃旧的内容

全局的键空间选择性移除

当内存不足以容纳新写入数据时,在键空间中

  • noeviction:新写入操作会报错。
  • [常用]allkeys-lru:移除最近最少使用的key。
  • allkeys-random:随机移除某个key。

设置过期时间的键空间选择性移除

当内存不足以容纳新写入数据时,在设置了过期时间的键空间中

  • volatile-lru:移除最近最少使用的key。
  • volatile-random:随机移除某个key。
  • volatile-ttl:有更早过期时间的key优先移除。

Redis事务

MULTI、EXEC、DISCARD、WATCH
Redis事务不保证原子性,且没有回滚
推荐:Lua脚本执行多个命令

模糊查询key

keys会导致主线程阻塞
scan可以无阻塞获取keys,有概率重复

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

推荐阅读更多精彩内容

  • redis常见使用场景 1 缓存 缓存现在几乎是所有中大型网站都在用的必杀技,合理的利用缓存不仅能够提升网站访问速...
    UPDOWN_GG阅读 497评论 0 1
  • Redis五大数据类型及其常用操作 字符串 set key value ——设置属性值get key ——获取值g...
    蜡笔没了小新_e8c0阅读 115评论 0 1
  • 须知:个人读书笔记,很多点没有具体描述,只是大体罗列下,立个flag后面完善。 文章罗列了基本知识(类型,小功能)...
    alivs阅读 870评论 0 17
  • 1、什么是Redis? Redis是一款内存高速缓存数据库。Redis全称为:Remote Dictionary...
    Java胖胖阅读 373评论 0 0
  • 前言 在大型应用场景中,常常使用nignx做负载均衡以分摊请求压力,随之而来的是session的存储成为难题,即服...
    霜漠冰河阅读 304评论 0 0