String
设置值
- SET
//设置key 和 value set [key] [value] //设置key seconds 秒后过期 set [key] [value] ex [seconds] //设置key millisecondes 毫秒后过期 set [key] [value] ps [milliseconds] //只有当key 不存在的时候,才进行插入 set [key] [value] nx //只有当key 存在的时候,才进行插入 set [key] [value] xx
- SETNX(Set if Not eXit)
//只有当key不存在才插入 setex [key] [value]
- SETEX
//设置key value 以及 seconds 后过期 setex [key] [seconds] [value]
- PSETEX
//设置key millisecondes 毫秒后过期 psetex [key] [milliseconds] [value]
- MSET
//同时设置多个值 mset [key1] [value1] [key2] [value2] [key3] [value3]
- APPEND
//向key 对应的 value 追加字符串 append [key] [value]
- SETRANGE
//从偏移量key开始,用value覆盖值 setrange [key] [offset] [value]
- INCR
//为key 对应的value 增加1 incr [key]
- INCRBY
//为key 对应的value 增加 value incrby [key] [value]
- INCRBYFLOAT
//为key 对应的value 增加 value (value 为浮点数) incrbyfloat [key] [value]
- DECR
//为key 对应的value减少1 decr [key]
- DECRBY
//为key 对应的value 减少value decr [key] [value]
- MSETNX
//当且仅当所有key都不存在的时候,才加入 msetnx [key] [value] [key1] [value1]
获取值
- GET
//获取key 对应的value get [key]
- MGET
//同时获取多个值 mget [key1] [key2]
- GETSET
//设置key对应的值为value,并且返回key之前的值 getset [key] [value]
- STRLEN
//获取key 对应的value 的长度 strlen key
- GETRANGE
//获取key 对应的从start 到 end的值 getrange [key] [start] [end]
LIST(链表)
设置值
- LPUSH
//将元素插入key 列表头,key 不存在则创建 lpush [key] [value]|[value ...]
- LPUSHX
//将元素插入key 列表头,如果key不存在,则什么都不做 lpushx [key] [value]
- RPUSH
//将元素插入到列表尾,key 不存在则创建 rpush [key] [value]|[value...]
- RPUSHX
//将元素插入到列表尾,key 不存在则什么都不做 rpushx [key] [value]
- LPOP
//移除并返回key的头元素 lpop [key]
- RPOP
//移除并返回key的尾元素 rpop [key]
- RPOPLPUSH
//移除key1的尾元素并将此元素作为key2的头元素 rpoplpush [key1] [key2]
- LREM
//移除key列表中 count个与value相同的元素 lrem [key] [count] [value] //count 可以有如下几种 // count>0 由表头到表尾开始搜索 // count<0 由表尾到表头开始搜索 // count=0 移除所有相同的元素
- LINSERT
//在tag之前或者之后插入元素value linsert [key] [BEFORE]|[AFTER] [tag] [value]
- LSET
//将key 中第index 的值设置为value lset [key] [index] [value]
- BLPOP
//阻塞式的弹出列表中的头元素,如果列表没有头元素,则一直等待直到有元素可弹或则超时 //timeout 为0表示无限期延长 默认单位为秒 //当key 为多个元素的时候,blpop会弹出第一个有元素的列表的头元素 blpop [key]|[key...] timeout
- BRPOP
//阻塞式的弹出列表中的尾元素,如果列表没有尾元素,则一直等待直到有元素可弹或则超时 //timeout 为0表示无限期延长 默认单位为秒 //当key 为多个元素的时候,blpop会弹出第一个有元素的列表的尾元素 brpop [key]|[key ...] timeout
- BRPOPLPUSH
//阻塞弹出source 的尾元素,放入destination的头部 //当source 为空的时,会一直等到source被放入元素或则超时 brpoplpush [source] [destination] [timeout]
- LTRIME
//对一个列表进行修剪 只保留start-stop的元素 //其中-1表示最后一个元素,-2 表示倒数第二个元素 //如果start>stop 则会清空整个列表 ltrim [key] [start] [stop]
获取值
- LRANGE
// lrange [key] [start] [stop]
- LLEN
//获取集合的元素的数量 llen [key]
- LINDEX
//获取列表key 第index 个元素的值 //时间复杂度O(n) 说明list内部实现为链表 lindex [key] [index]
SET
设置值
- SADD
//将元素添加到集合中 sadd key [member]|[member ...]
- SPOP
//移除并返回集合中任意一元素 spop [key]
- SREM
//移除集合key中的一个或多个member元素。不存在的元素将被忽略 srem key [member]|[member...]
- SMOVE
//将member元素从source集合移动到destination集合中 smove [source] [destination] [member]
- SINTERSTORE
//将多个集合的交集保存到destination中 sinterstore [destination] [key]|[key ...]
- SUNIONSTORE
//将多个集合的交集保存到destination中 sunionstore [destination] [key]|[key ...]
- SDIFFSTORE
//将多个集合的差集保存到destination中 sdiffstore [destination] [key]|[key ...]
获取值
- SISMEMER
//判断member是否是key的成员 //时间复杂度为O(1),说明内部是通过hash实现 sismember [key] [member]
- SRANDMEMBER
//随机返回key中count个元素 //如果count为正,且大于集合中的数量,则返回整个集合 //如果count为负,且绝对值大于集合的总数量,则依然会返回count的数量元素,不过值会重复 srandmember [key] [count]
- SCARD
//返回集合中元素的数量 scard [key]
- SMEMBERS
//获取集合中所有成员 //当集合非常大的时候,可能会有性能问题 smembers [key]
- SINTER
//获取集合|多个集合的交集 sinter key|[key ...]
- SUNION
//获取多个 sunion [key]|[key ...]
- SDIFF
//获取集合之间的差集 sdiff [key]|[key ...]
ZList(有序集合)
设置值
- ZADD
//将一个或多个元素加入到有序集合中 //返回被成功添加的新成员的数量,不包括那些被更新,已存在的成员 zadd [key] [socre] [member]|[socre] [member] ...
- ZINCRBY
//为有序集key 的成员 member 的 score 值加上增量 zincrby [key] [increment] [member]
- ZREMRANGEBYRANK
//通过排名区间指定需要移除的成员(包括start和stop) zremrangebyrank [key] [start] [stop]
- ZREMRANGEBYSCORE
//通过分数移除指定区间成员(包括min和max) zremrangebyscore [key] [min] [max]
- ZREMRANGEBYLEX
//当成员具有相同的分数的时候,可以通过此命令先使用字段序排序,然后移除介于max和min之间的元素 zremrangebylex [key] [min] [max]
获取值
- ZSCORE
//获取有序集key 中,成员member的score值 zscore [key] [member]
- ZCARD
//获取有序集key的基数 zcard key
- ZCOUNT
//获取key中 score在 min 和 max 之间的数(包括min 和 max) zcount [key] [main] [max]
- ZRANGE
//获取key中 第start 到 stop(包括start 和 stop)个成员 | 同时返回分数 //成员严格由小到大排列 //可以使用负数表示倒数 zrange [key] [start] [stop] | [withscores]
- ZREVRANGE
//获取key中 第start 到 stop(包括start 和 stop)个成员 | 同时返回分数 //成员严格由大到小排列 zrevrange [key] [start] [stop] | withscores
- ZRANGEBYSCORE
//获取有序集中所有score 在 min 和 max (包括 max 和 min)之间的成员 | 同时返回分数 | //注意offset 很大的时候可能会有性能问题 //min 和 max 可以分别指定为 -inf 和 +inf 指定为当前集合中最小元素和最大元素 //min 和 max 前面可以通过添加(表示开区间 zrangebyscore [key] [min] [max] | [withscores] | limit [offset] [count]
- ZRANK
//获取member 在 key 中的排名 zrank [key] [member]
- ZREVRANK
//获取member 在key 中的反向排名 zrevrank [key] [member]
- ZRANGEBYLEX
//当成员具有相同的分数值的时候,可以通过此命令通过字典序排序,并返回min 到max 的值 //注意offset在数据量过大的时候可能有性能问题 zrangebylex [key] [min] [max] | limit [offset] [count]
- ZLEXCOUNT
//当成员具有相同的值的时候,可以通过此命令通过字典序排序,然后返回介于min和min元素的数量 zlexcount [key] [min] [max]
- ZUNIONSTORE
//计算给定一个或多个有序集的并集,可以通过aggregate 指定取并集的方式 zunionstore [destination] [numberkeys] [key]|[key ...] | [aggregate] [sum] [max] [min]
- ZINTERSTORE
//计算给定一个或多个有序集的交集,可以通过aggregate 指定取交集的方式 zinteerstore [destination] [numberkeys] [key]|[key ...] | [aggregate] [sum] [max]
HASH
设置值
- HSET
//将hash 表中field 的值设定为value //这里一个hash相当于一个对象, field相当于属性, value便是他的值 hset [hash] [field] [value]
- HSETNX
//当且仅当field 不存在于hash中的时候,才将它的值设置为value hsetnx [hash] [field] [value]
- HDEL
//删除hash 表中一个或者多个域 hdel [hash] [field] | [field ...]
- HINCRBY
//为hash表中field字段加上增量increment hincrby [key] [field] [increment]
- HINCRBYFLOAT
//为hash表中field字段加上浮点增量increment hincrbyfloat [key] [field] [increment]
- HMSET
//同时将多个值存入hash中 hmset [hash] [field] [value]| [field] [value] ...
获取值
- HLEN
//获取hash表中属性的数量 hlen [hash]
- HSTRLEN
//获取hash表中field字段对应的属性的长度 hstrlen [hash] [field]
- HGET
//获取hash 某个 field中的值 hget [hash] [field]
- HEXISTS
//判断某个值是否存在hash 表中 hexists [hash] [field]
- HMGET
//获取hash表中多个值 hmget [hash] [field]|[field ...]
- HKEYS
//获取hash表中所有的属性 hkeys [hash]
- HVALS
//获取hash表中所有属性的值 hvals [hash]
- HGETALL
//获取hash表中所有属性和值 hgetall [hash]
数据库
- EXISTS
//检查指定的key是否存在 exists [key]
- TYPE
//获取key所存储的类型, 主要有:none string list set zset hash stream type [key]
- RENAME
//将key 修改为 newkey //若newkey已经存在,则此key将会覆盖旧值 rename [key] [newkey]
- RENAMENX
//仅当newkey不存在的时候将key修改为newkey renamenx [key] [newkey]
- MOVE
//将当前数据库的key移动到给定的数据库[db]中 //如果当前数据库和目标数据库有相同的名字key,那么move没有任何效果 move [key] [db]
- DEL
//删除给定的一个或者多个key del key [key ...]
- RANDOMKEY
//从数据库中随机返回一个key randomkey
- DBSIZE
//获取当前数据库key的数量 dbsize
- KEYS
//查找所有符合给定模式的key //KEYS * 匹配数据库中所有 key 。 //KEYS h?llo 匹配 hello , hallo 和 hxllo 等。 //KEYS h*llo 匹配 hllo 和 heeeeello 等。 //KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。 keys [pattern]
注意:keys 速度非常快,但是在一个大的数据库中使用依然有可能造成性能问题
- SCAN(可以用于解决大数据keys | smembers 性能问题)
//增量迭代元素 // cursor 表示开始迭代的顺序 // scan 每次会返回此次迭代进行的游标,可以直接将这个值作为下次迭代的游标 // count [提示]scan每次迭代应该返回的元素数量,一般此选项有效,默认为10 // pattern 同 keys scan [cursor] | match [pattern] | count [count]
scan 可能存在的问题:有可能在迭代过程中其他用户修改了数据,此时scan可能是获取不到这个数据的
scan 保证如果在完整遍历的过程中,如果一个元素一直存在于数据库中,则scan一定会返回这个元素
但是scan可能会返回重复的元素,因此过滤应该交给客户端自己完成
scan 只是用于数据库[db],对于每种数据类型分别对应有:
SSCAN
,HSCAN
,ZSCAN
- SORT
//将集合通过排序后返回,具体参数比较多,可以参考官方文档 sort key [...] sort key DESC sort key limit 3 offset 1
sort 比较复杂,这里简单讲解下:
- 一般sort默认只能对数字排序,如果是其他的 则会报错,可以通过 alpha 指定为通过
string
排序sort list alpha
- 可以通过
DESC
选项指定为反向排序 -
可以通过
limit offset
指定分页 -
可以通过
BY
选项进行联合排序//先获取uid的值,然后组装到user_level_*上,然后以user_level_* 为key排序 sort uid BY user_level_*
- 可以使用
GET
选项,根据排序的结果取出相应的值//将uid排序后将结果组装再获取user_name_*的值 //get可以多次使用,用来获取多个值 SORT uid GET user_name_*
- 可以通过stored选择将排序结果保存到数据库中
sort number stored sorted-numbers
- 一般sort默认只能对数字排序,如果是其他的 则会报错,可以通过 alpha 指定为通过
- FLUSHDB
//清空当前数据库中所有key flushdb
- FLUSHALL
//清空当前Redis中所有数据库 flushall
- SELECT
//切换当前数据库 select [db]
- SWAPDB
//交换两个数据库的所有数据 swapdb [db1] [db2]