字符串
通用命令
查看所有key
> key *
遍历所有key
计算键总数
> dbsize
检查键是否存在
> exists key
存在返回1,不存在返回0
删除键
> del key [key ...]
可以删除任意数据结构,也可以同时删除多个键。
键过期
> expire key seconds
key再seconds秒后过期
大于或等于0的整数:键剩余的过期时间
-1:键没设置过期时间
-2:键不存在
查看key剩余的过期时间:
> ttl key
去掉key的过期时间:
> persist key
查看键的数据结构类型
type key
返回key的类型
设置值
> set key value [ex second] [px milliseconds] [nx|xx]
ex seconds:为键设置秒级过期时间
px milliseconds:为键设置毫秒级过期时间
nx:键必须不存在,才可以设置成功,用于添加
xx:与nx相反,键必须存在,才可以设置成功,用于更新
批量设置
> mset key value [key value]
获取值
> get key
如果要获取的键不存在,则返回nil(空)
批量获取值:
> mget key [key ...]
批量获取值有助于提高效率。
计数
> incr key
对key做自增操作。
返回结果有三种情况:
值不是整数,返回错误。
值是整数,返回自增后的结果。
键不存在,按照值为0自增,返回结果为1。
如果对一个不存在的键执行incr
操作后,返回结果为1:
> exists key
(integer) 0
> incr key
(integer) 1
> incr key
(integer) 2
除次之外还有:
decr:自减
incrby:自增指定数字
decrby:自减指定数字
incrbyfloat:自增浮点数
不常用命令
追加值
> append key value
例如:
> get key
"hello"
> append key world
(integer) 10
> get key
"helloworld"
字符串长度
> strlen key
设置并返回原值
> getset key value
getset
和set
一样会设置值,但是getset
会返回原来的值
设置指定位置的字符
setrange key offeset value
例如:
> set key hello
> setrange key 0 o
> get key
oello
获取部分字符串
> getrange key start end
start
从0开始。
数据结构和内部编码
查询内部编码
加入存在hello
的键
> object encoding hello
"embstr"
每种数据结构都有两种以上的内部编码实现
单线程架构
字符型内部编码
int:8个字节的长整型
embstr:小于等于39个字节的字符串
raw:大于39个字节的字符串
哈希
基本概念
hash是第二种redis结构,在编程语言中非常常见。在redis里,哈希又是另一种键值对结构。redis本身就是key-value型,哈希结构相当于在value里又套了一层kv型数据。哈希和C#里的字典,java里的map结构是一样的。
命令
设置值
> hset key field value
成功返回1,失败返回0。
要批量设置的话:
hmget key field value [field value ...]
获取值
> hget key field
如果值不存在,返回nil。
批量获取:
> hmget key field [field ...]
删除field
> hdel key field [field ..]
返回结果为成功删除的field的个数
计算field个数
> hlen key
判断field是否存在
> hexists key field
获取所有field
> hkeys key
获取所有value
> hvals key
获取所有的field-value
> hgetall key
自增
> hincrby key field
> hincrbyfloat key field
hincrby和hincrbyfloat的作用域是field。
计算value的字符串长度
> hstrlen key field
内部编码
ziplist(压缩列表)
当哈希类型元素个数小于hash-max-ziplist-entries配置(默认512个),同时所有值小于hash-max-ziplist-value配置(默认64字节)时,会启用。
> object encoding hashkey
"ziplist"
hashtable(哈希表)
> object encoding hashkey
"hashtable"
列表
基本概念
Redis列表是简单的字符串列表,按照插入顺序排序。
弹入弹出操作:
命令
添加
从右边插入元素:
> rpush key value [value ...]
从左边插入元素:
> lpush key value [value ...]
向某个元素前或者后插入元素:
> linsert key {before|after} pivot(列表里的元素) value
返回当前列表的长度。
查找
获取指定范围内的元素列表:
> lrange key start end
例如从左到右获取列表的所有元素:
> lrange listkey 0 -1
获取列表指定索引下标的元素:
> lindex key index
获取列表长度
> llen key
删除
从列表左侧弹出元素:
> lpop key
从列表右侧弹出:
> rpop key
删除指定元素
> lrem key count value
count>0:从左到右,删除最多count个元素
count<0:从右到左,删除最多绝对值count个元素
count=0:删除所有
例如:
> lrange key 0 -1
a a a a a a b g b b b
> lrem key 5 a
> lrange key -1 0
a b g b b b
按照索引范围修建列表:
> ltrim key start end
会保留start到end的元素(包括了start和end)。
修改
修改指定索引下标的元素:
> lset key index newValue
阻塞操作
> blpop key [key ...] timeout
> brpop key [key ...] timeout
内部编码
ziplist:压缩列表
linkedlist:链表
集合
基本概念
集合类型用来保存多个的字符串元素,不允许有重复元素。
命令
集合内操作
添加元素
> sadd key element [element ...]
返回成功添加的元素个数。
删除元素
> srem key element [element ...]
返回成功删除的元素个数。
获取集合内所有元素
> smembers key
返回结果是无序的。
计算元素个数
> scard key
检测元素是否存在于集合中
> sismember key element
存在返回1,反之返回0。
随机从集合返回指定个数元素
> srandmember key [count]
不写个数则默认为1。集合内元素依然存在。
从集合随机弹出元素
> spop key
集合间操作
交集
> sinter key [key ...]
并集
> suinon key [key ...]
差集
> sdiff key [key ...]
保存集合的结果
> sinterstore destination key [key ...]
> suionstore destination key [key ...]
> sdiffstore destination key [key ...]
内部编码
.intset:整数集合。
.hashtable:哈希表。
有序集合
基本概念
保留了集合不能有重复成员的特性,有序集合内的元素又可以排序。
命令
集合内操作
添加成员
> zadd keey score member [score member ...]
Redis3.2为zadd命令新添加的四个选项:
nx:member必须不存在,用于添加。
xx:member必须存在,用于更新。
ch:返回操作后有序集合元素和分数发生变化的个数。
incr:对score做增加。
计算个数
> zcard key
计算某个成员的分数
> zscore key member
结果不存在则返回nil
。
计算成员的排名
> zrank key member
> zrevrank key member
删除成员
> zrem key member [member ...]
增加成员的分数
> zincrby key increment member
返回指定排名范围的成员
> zrange key start end [withscores]
> zrevrange key start end [withscores]
加withsscores
选项会同时返回成员的分数。
返回指定分数范围的成员
> zrangebyscore key min max [withscores] [limit offset count]
> zrevrangebyscore key min max [withscores] [limit offset count]
limit offset count
限制输出的起始位置和个数。min
和max
都支持开区间,例如
> zrangebyscore user:rank (200 +inf withscores
+inf
代表无线大,-inf
代表无限小。
返回指定分数范围成员个数
> zcount key min max
删除指定排名内的升序元素
> zremrangebyrank key start end
删除指定分数范围的成员
> zremrangebyscore key min max
集合间操作
交集
> zinterstore destination numkeys key [key ...] [weights weithts [weights ...]] [aggregate sum|min|max]
并集
> zunionstore destination numkeys key [key ...] [weights weithts [weights ...]] [aggregate sum|min|max]
内部编码
.ziplist:压缩列表。
.skiplist:跳跃表。
键管理
键管理
重命名
> rename key newkey
这个存在已有变量被覆盖的风险,可以使用:
> renamenx key newkey
确保newkey
不存在的时候才覆盖。
随机返回一个键
> randomkey
查看键存活时间
> ttl key
pttl
精度更高,可以达到毫秒级。
迁移键
方式一:move
> move key db
把key
迁移到另一个数据库。
方式二:dump+restore
> dump key
> restore key ttl value # ttl=0代表没有过期时间
在不同Redis数据库之间做数据迁移。
方式三:migrate
> migrate host port {key|""} destination-db timeout [copy] [replace] [key key ...]
遍历键
全量遍历键
> keys pattern
渐进式遍历
> scan cursor [match pattern] [count number]
数据库管理
切换数据库
> select dbIndex
Redis中默认有16个数据库。
flushdb/flushall
清除数据库:
flushdb:清除当前数据库。
flushall:清除所有数据库。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。