Redis基础入门篇

数据结构

字符串 :可以是字符串、数字、整形浮点数、二进制(图片/音频/视频),最大不超过512M。

设值命令

set age 37 ex 10 -- 设置10秒后过期

setnx name magicq -- 不存在键时,返回1设置成功;存在时失败返回0

取值命令

get age -- 存在键返回对应值,不存在返回nil

批量设值

mset age 37 name magic -- 会覆盖旧值,如果不希望这个效果,则考虑使用msetnx,这个操作是原子操作,只有当所有key都不存在时操作成功1。否则返回0。

批量取值

mget age name gender -- 返回37,magicq gender为nil

字符串(string)计数

incr age -- INCR 命令是一个针对字符串的操作。 因为 Redis 并没有专用的整数类型, 所以键 key 储存的值在执行 INCR 命令时会被解释为十进制 64 位有符号整数。

decr age -- 对字符串进行减一操作

incrby age 2 --对字符串进行加二操作

decrby age 2 -- 对字符串进行减二操作

incrbyfloat age 1.1 --浮点型age加1.1

字符串(string)追加

append name hello,world!! -- 字符串追加,每个中文占3个字节。如果name存在则追加,不存在则相当于字符串设值操作(set name hello,world!! )


哈希(Hash)

HSET hash field value --创建hash表,并设值field对应的值。 当 HSET 命令在哈希表中新创建 field 域并成功为它设置值时, 命令返回 1 ; 如果域 field 已经存在于哈希表, 并且 HSET 命令成功使用新值覆盖了它的旧值, 那么命令返回 0 。

HMSET hash field1 value1 field2 value2  -- 创建hash表,并批量设值field及其对应的值。

HGET hash field --取得hash表field对应的值

HMGET hash filed1 ,field2 --批量获取hash表对应域的值

HDEL hash field1,field2 --删除hash表一个或多个field,field存在则删除成功,返回1;field不存在则删除失败,返回0。

HKEYS key --返回hash表key中所有域。当key存在,则返回域列表,不存在则返回空列表。

HLEN key -- 返回哈希表 key 中域的数量,与之相似的HKEYS key 是返回域的明细列表。

HSTRLEN key field -- 返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度(string length)。如果给定的键或者域不存在, 那么命令返回 0 。

HEXISTS key field -- 判断field是否存在,存在返回1,不存在返回0。

HVALS key --返回hash表key中所有的field值。

HGETALL key --返回hash表key中所有域和值。

HINCRBY key field 1 -- 为哈希表 key 中的域 field 的值加上增量 increment,增量也可以为负数,相当于对给定域进行减法操作。(操作后的field值被限定为64位有符号整数内,如果field为字符串值,该操作会报错)


列表(list)

LLEN key --返回列表长度

LINDEX key index -- 返回列表 key 中,下标为 index 的元素。以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

LSET key index value -- 将列表 key 下标为 index 的元素的值设置为 value 。

LPUSH key value [value …] -- 将一个或多个值 value 插入到列表 key 的表头。

LPOP key -- 移除并返回列表 key 的头元素,key不存在时返回nil。

LRANGE key start end -- 返回包含指定区间内的元素列表。


集合(set)

SADD key member [member …] -- 将一个或多个元素加入集合key中,如果key中存在该member将忽略,key为非集合时报错,key不存在时创建新的集合。

SPOP key -- 移除并返回集合中的一个随机元素。

SMEMBERS key -- 返回集合 key 中的所有成员。

SCARD key -- 返回集合基数(成员数量)

SINTER key [key …] -- 返回集合的交集。

SUNION key [key …] -- 返回集合的并集。

SDIFF key [key …] -- 返回集合的差集。


有序集合(zset)

ZADD key score member -- 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。 zadd key xx|nx score member ,其中nx表示key必须不存在,创建有序集合。xx表示key必须存在,用于对成员进行更新操作。

ZINCRBY key increment member -- 为有序集 key 的成员 member 的 score 值加上增量 increment 。此命令等同于 zadd key xx incr score member。

ZRANGE key start stop [WITHSCORES] -- 返回有序集 key 中,指定区间内的成员。

ZCARD key -- 返回有序集 key 的基数。


脚本命令

脚本命令

全局命令

全局命令

Q&A

Redis为什么速度这么快(缓存因素除外)?

采用c语言实现

基于内存操作

pipline及Lua脚本执行命令,减少RTT

Redis版本选择

redis的第二位版本号是偶数代表当前版本是稳定版,为奇数则表明当前是下一个稳定版本的开发版。

谈谈Redis有哪些应用场景?

数据库缓存

排行榜

计数器

社交网络

消息队列

其他

缓存雪崩如何解决?

雪崩现象:是指在某一个时间段,缓存集中过期失效。

解决方案:对热门缓存失效期设值长些,冷门缓存失效期短些。这种周期性失效产生的雪崩,无非使数据库面临着周期性的访问IO上升,此时数据库一般是能顶的住的。就怕是缓存节点宕机,造成大量缓存失效带来的非自然雪崩,很可能压垮数据库。

缓存穿透如何解决?

缓存穿透:http请求伪造无效关键字进行DB查询,使得redis失效,查询大量落到DB。

解决方案:将入库数据同时存入布隆过滤器(0不存在,1存在),当查询DB前,先使用布隆过滤器对落到DB的请求进行拦截判断,如果布隆过滤器返回0,则表示当前请求为无效请求,DB中不存在,否则查询DB。

如何使用Redis完成订单列表场景?

1、将订单信息使用hash表进行封装。

2、将hash表作为元素放入list中。

谈谈Redis两种持久化(RDB和AOF)及加载流程?

RDB持久化方式: 手动触发可使用SAVE和BGSAVE命令。

        SAVE命令:执行一个同步保存操作,将当前Redis实例的所有数据快照(snapshot)以 RDB 文件的形式保存到硬盘。由于当前任务会阻塞所有客户端线程,因此线上不建议使用。

        BGSAVE命令:在后台异步(Asynchronously)保存当前数据库的数据到磁盘。BGSAVE 命令执行之后立即返回 OK ,然后 Redis fork 出一个新子进程,原来的 Redis 进程(父进程)继续处理客户端请求,而子进程则负责将数据保存到磁盘,然后退出。客户端可以通过 LASTSAVE 命令查看相关信息,判断 BGSAVE 命令是否执行成功。在redis-cli shutdown关闭redis服务时,如果没有开启AOF持久化,自动执行BGSAVE。

RDB持久化步骤

1、 config set dir /usr/local

2、bgsave ,将dump.rdb保存到/usr/local下

3、将dump.rdb文件拷贝到redis安装目录与redis.conf同级目录,重启redis即可。

RDB持久化优缺点

优点:

压缩后的二进制文件,适用于备份、全量复制,用于灾难恢复。

加载RDB恢复数据远快于AOF方式。

缺点:

无法做到实时持久化,每次都要创建子线程,频繁操作成本过高。

二进制文件,存在老版本不兼容新版本rbd文件问题。

AOF持久化: 是一种利用操作日志进行恢复的实时持久化方案。

流程

1. 追加日志:所有写入命令(set/hset)会追加到aof_buf缓冲区。

2. 同步磁盘:AOF缓冲区向磁盘sync同步。

3. 重写压缩:随着AOF文件越来越大,定期对AOF文件rewrite重写,达到压缩。

4. 加载恢复:当redis重启,可load加载AOF文件进行加载并解析恢复。

实现

将redis.conf设置:appendonly yes后,默认生成 appendfilename "appendonly.aof" 文件。

持久化加载流程

当AOF和RDB同时存在时,优先加载AOF

若关闭了AOF,加载RDB文件

加载AOF/RDB成功,redis重启成功

AOF/RDB失败,redis重启打印错误信息

参考文献

http://redisdoc.com/

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

推荐阅读更多精彩内容

  • Redis是啥 Redis是一个开源的key-value存储系统,由于拥有丰富的数据结构,又被其作者戏称为数据结构...
    一凡呀阅读 1,172评论 0 5
  • 本文为笔者对在学习Redis过程中所收集资料的一个总结,目的是为了以后方便回顾相关的知识,大部分为非原创内容。特此...
    EakonZhao阅读 14,419评论 0 9
  • Redis从入门到精通:中级篇 本文目录 上一篇文章以认识Redis为主,写了Redis系列的第一篇,现在开启第二...
    叨唧唧的阅读 677评论 0 0
  • Ubuntu下安装redis 安装redis 在 Ubuntu 系统安装 Redi 可以使用以下命令: 启动 Re...
    riverstation阅读 923评论 0 0
  • 一、安装 1. 官网下载源码 2. 安装依赖包 3. 下载源码包 3. 解压安装 4. 配置 redis 守护进程...
    你笑的那么美丶阅读 418评论 0 0