1、准备知识
1.1 全局命令:

命令

解释

keys *

查看所有键

dbsize

查看键总数

exists key

检查键是否存在

del key [key …]

删除键

expire key seconds

键过期(-1 未设置/-2 键不存在)

type key

键的数据结构类型

1.2 数据结构与内部编码:

type命令实际返回的就是当前键的数据结构类型,分别为:string、hash、list、set、zset;
每种数据类型结构都有自己底层的内部编码实现,而且是多种实现,这样redis在合适场景选择合适的内部编码:

命令

解释

object encoding key

查看key对应值的编码类型

设计的好处:
1、改进内部的编码对外的数据结构和命令无影响;
2、多种内部编码实现可以在不同场景下发挥各自的优势;

1.3 单线程架构:

使用单线程架构和I/O多路复用模型

2、字符串(string)
2.1 常用命令:

命令

解释

set key value [ex seconds] [px millis] [nx|xx]

设值

set命令选项:
ex seconds:为键设值秒级过期时间
px millis:为键设值毫秒级过期时间
nx:键必须不存在才可添加成功,用于添加
xx:与nx相反,键必须存在才可设置成功,用于更新;

命令

解释

get key

获取值

mset key value [key value …]

批量设值

mget key [key …]

批量获取值

incr key

计数

incr命令用于对值做自增操作,返回结果分三种情况:
(1)、值不是整数,返回错误;
(2)、值是整数,返回自增后的结果;
(3)、键不存在,按照值为0自增,返回结果为1;
除了incr命令,redis提供了decr、incrby、decrby、incrbyfloat等;
很多存储系统和编程语言内部使用CAS机制实现计数功能,会有一定cpu开销,但在redis中完全不存在这个问题

2.2 不常用命令:

命令

解释

append key value

追加值

strlen key

字符串长度

getset key value

设置并返回原值

setrange key offset value

设置指定位置的字符

getrange key start end

获取部分字符串

2.3 内部编码:

字符串类型的内部编码有三种:
(1)、int:8个字节的长整型;
(2)、embstr:大于等于39个字节的字符串;
(3)、大于39个字节的字符串;

3、哈希(hash)
3.1 常用命令:

命令

解释

hset key field value

设值

hget key field

获取值

hdel key field

删除field

hlen key

计算field个数

hmset key field value [field value … ]

批量设置field-value

hmget key field [field …]

批量获取field-value

hexists key field

判断field是否存在

hkeys key

获取所有field

hvals key

获取所有value

hgetall key

获取所有的field-value

hincrby key field

值自增

hincrbyfloat key field

值自增

hstrlen key field

计算value的字符串长度

3.2 内部编码:

哈希类型内部编码有两种:
1、ziplist(压缩列表):当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个)、同时所有值都小于has-max-ziplist-value配置(默认64字节)时,redis会使用ziplist作为哈希的内部实现,ziplist使用更加紧凑的结构实现多个元素的连续存储,故在节省内存方面比hashtable更加优秀;
2、hashtable(哈希表):当哈希类型无法满足ziplist的条件时,redis会使用hashtable作为哈希的内部实现,因为此时ziplist的读写效率会下降,而hashtable的读写时间复杂度为O(1);

(1)、当field个数较少且没有大的value时,内部编码为ziplist;
(2)、当有value大于64字节,内部编码会由ziplist变为hashtable;
(3)、当field个数超过512,内部编码也会有ziplist变为hashtable;

参考《redis开发与运维》