非特定数据结构的命令

keys 返回满足给定 pattern 的所有 key keys *
exists 判断一个 key 是否存在
del 删除一个 key
expire 为一个 key 设置过期时间(单位: 秒)
move 将当前数据库中的 key 转移到其他数据库
persist 移除一个被设置过期时间的 key 的状态(即变为 normal 状态)
randomkey 随机返回一个 key
rename 重命名一个 key
type 返回一个 key 的类型
ping
echo 输出
select 选择数据库,数据库编号为 0~15
quit 退出连接
dbsize 返回当前数据库中 key 的数目
info 服务器信息
monitor 实时转储收到的请求
config get 获取服务器配置信息
flushdb 删除当前数据库中所有的 key
flushall 删除所有数据库中所有的 key

对key操作的相关指令介绍

exits key 检测指定 key 是否存在,返回 1 表示存在,0 不存在

del key1 key2 …… keyN 删除给定 key,返回删除 key 的数目,0 表示给定 key 都不存在

type key 返回给定 key 值的类型。返回 none 表示 key 不存在,string 字符类型,list 链表类型 set 无序集合类型……

keys pattern 返回匹配指定模式的所有 key

randomkey 返回从当前数据库中随机选择的一个 key,如果当前数据库是空的,返回空串

rename oldkey newkey 重命名一个 key,如果 newkey 存在,将会被覆盖,返回 1 表示成功,0 失败。可能是 oldkey 不存在或者和 newkey 相同。

renamenx oldkey newkey 同上,但是如果 newkey 存在返回失败。

expire key seconds 为 key 指定过期时间,单位是秒。返回 1 成功,0 表示 key 已经设置过过期时间或者不存在。

ttl key 返回设置过过期时间 key 的剩余过期秒数。-1 表示 key 不存在或者未设置过期时间。

select db-index 通过索引选择数据库,默认连接的数据库是 0,默认数据库数是 16 个。返回 1 表示成功,0 失败。

move key db-index 将 key 从当前数据库移动到指定数据库。返回 1 表示成功。0 表示 key不存在或者已经在指定数据库中。

string命令

设值命令:
set key value 设置 key 对应 string 类型的值,返回 1 表示成功,0 失败。
set age 25 xx //存在键age时,返回1成功
还可以设置带过期时间的:
set age 23 ex 10 //10秒后过期 px 10000 毫秒过期

setnx key value 如果 key 不存在,设置 key 对应 string 类型的值。如果 key 已经存在,返回 0。
setnx name test //不存在键name时,返回1设置成功;存在的话失败0

批量设置

mset key1 value1 …… keyN valueN 一次设置多个 key 的值,成功返回 1 表示所有的值都设置了,失败返回 0 表示没有任何值被设置。

msetnx key1 value1 …… keyN valueN 一次设置多个 key 的值,但是不会覆盖已经存在的 key

批量设值:
mset country china city beijing

获值命令:
get key 获取 key 对应的 string 值,如果 key 不存在返回 nil
get age //存在则返回value, 不存在返回nil

批量获取

mget key1 key2 …… keyN 一次获取多个 key 的值,如果对应 key 不存在,则对应返回 nil。

批量获取:
mget country city address //返回china beigjin, address为nil

  1. <br />若没有mget命令,则要执行n次get命令<br />![](https://cdn.nlark.com/yuque/0/2020/jpeg/350923/1592469092521-886fc292-04e1-447b-bd24-94224e429551.jpeg#align=left&display=inline&height=200&margin=%5Bobject%20Object%5D&originHeight=200&originWidth=303&status=done&style=stroke&width=303)<br />使用mget=1次网络请求+redis内部n次查询<br />![](https://cdn.nlark.com/yuque/0/2020/jpeg/350923/1592469092672-f97620d0-ef47-4ec3-9e0b-13a46a4e8d07.jpeg#align=left&display=inline&height=159&margin=%5Bobject%20Object%5D&originHeight=159&originWidth=297&status=done&style=none&width=297)

先获取key的值再设置key的值

getset key value 先获取 key 的值,再设置 key 的值。如果 key 不存在返回 nil。

计数:

incr key 对 key 的值做++操作,并返回新的值。注意 incr 一个不是 int 的 value 会返回错误,incr 一个不存在的 key,则设置 key 值为 1。
decr key 对 key 的值做—操作,decr 一个不存在 key,则设置 key 值为-1。
incrby key integer 对 key 加上指定值 ,key 不存在时候会设置 key,并认为原来的 value是 0。
decrby key integer 对 key 减去指定值。decrby 完全是为了可读性,我们完全可以通过 incrby一个负值来实现同样效果,反之一样

incr age //必须为整数自加1,非整数返回错误,无age键从0自增返回1
decr age //整数age减1
incrby age 2 //整数age+2
decrby age 2//整数age -2
incrbyfloat score 1.1 //浮点型score+1.1

append追加指令:
set name hello; append name world //追加后成helloworld
字符串长度:
set hello “世界”;strlen hello//结果6,每个中文占3个字节
截取字符串:
set name helloworld ; getrange name 2 4//返回 llo

List命令

lpush key string 在 key 对应 list 的头部添加字符串元素,返回 1 表示成功,0 表示 key 存在且不是 list 类型。

rpush key string 在 key 对应 list 的尾部添加字符串元素。

llen key 返回 key 对应 list 的长度,如果 key 不存在返回 0,如果 key 对应类型不是 list返回错误。

lrange key start end 返回指定区间内的元素,下标从 0 开始,负值表示从后面计算,-1 表示倒数第一个元素 ,key 不存在返回空列表。

ltrim key start end 截取 list 指定区间内元素,成功返回 1,key 不存在返回错误。

lset key index value 设置 list 中指定下标的元素值,成功返回 1,key 或者下标不存在返回错误。

lrem key count value 从 List 的头部(count正数)或尾部(count负数)删除一定数量(count)匹配 value 的元素,返回删除的元素数量。count 为 0 时候删除全部。

lpop key 从 list 的头部删除并返回删除元素。如果 key 对应 list 不存在或者是空返回 nil,如果 key 对应值不是 list 返回错误。

rpop key 从 list 的尾部删除并返回删除元素。

blpop key1 …… keyN timeout 从左到右扫描,返回对第一个非空 list 进行 lpop 操作并返回,比如blpop list1 list2 list3 0 ,如果 list 不存在 list2,list3 都是非空则对 list2 做lpop 并返回从 list2 中删除的元素。如果所有的 list 都是空或不存在,则会阻塞 timeout秒,timeout 为 0 表示一直阻塞。当阻塞时,如果有 client 对 key1…keyN 中的任意 key进行 push 操作,则第一在这个 key 上被阻塞的 client 会立即返回。如果超时发生,则返回nil。有点像 unix 的 select 或者 poll。

brpop 同 blpop,一个是从头部删除一个是从尾部删除。


添加命令:
rpush james c b a //从右向左插入cba, 返回值3
lrange james 0 -1 //从左到右获取列表所有元素 返回 c b a
lpush key c b a //从左向右插入cba
linsert james before b teacher //在b之前插入teacher, after为之后,使用lrange james 0 -1 查看:c teacher b a
查找命令:
lrange key start end //索引下标特点:从左到右为0到N-1
lindex james -1 //返回最右末尾a,-2返回b
llen james //返回当前列表长度
lpop james //把最左边的第一个元素c删除
rpop james //把最右边的元素a删除

lrem key count value//删除指定元素
如:lpush test b b b b b j x z //键test放入z x j b b b b b
lrange test 0 -1 //查询结果为 z x j b b b b b
lrem test 4 b //从左右开始删除b的元素,删除4个,
若lrem test 8 b, 删除8个b, 但只有5个全部删除
lrange test 0 -1 //删除后的结果为 b j x z
lrem test 0 b //检索所有b全部删除 j x z

lpush user b b b b b j x z //键user从左到右放入 z x j b b b b b
ltrim user 1 3 //只保留从第2到第4的元素,其它全删
lrange user 0 -1 //查询结果为 x j b, 其它已全被删掉

lpush user01 z y x //键user01从左到右放入x y z
lset user01 2 java // 把第3个元素z替换成java
lrange user01 0 -1 //查询结果为 x y java

lpush 在链表左边推进一个元素
rpush 在链表右边推进一个元素
linsert 在链表某个元素之前或之后插入一个元素 linsert mlist before “world” “hello “
lset 设置 list 中指定下标的元素值(下标从 0 开始) lset mlist 0 “first”
lrem 从 list 中删除 count 个相同的值,当 count > 0 时,从头到尾的顺序删除;当 count < 0 时,从尾到头的顺序删除 lrem mlist 1 “first”
ltrim 保留指定 list 索引(下标)范围内的数据 ltrim mlist 1 -1
lpop 在链表左边弹出一个元素,返回被弹出的值
rpop 在链表右边弹出一个元素,返回被弹出值
rpoplpush 在第一个链表右边弹出一个元素推进到第二个链表中 rpoplpush mlist mlistbak
lindex 返回链表中 index 位置的元素
llen 返回链表的长度