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 的基数。


脚本命令

Redis基础入门篇_第1张图片
脚本命令

全局命令

Redis基础入门篇_第2张图片
全局命令

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/

你可能感兴趣的:(Redis基础入门篇)