Redis是一个键值对内存数据库(可持久化),一般存储生命周期为开启关闭一个实例的时间,其中的数据都存储在同一个数据库下,以键值对的形式存储起来,键可以理解为定义一条数据的标签,通过该标签来访问和寻找数据,Redis键命令用于管理redis的键,常见的命令有:
命令 | 作用 |
---|---|
DEL key | 该命令用于在key存在时删除key |
EXISTS key | 检查给定key是否存在 |
EXPIRE key seconds | 为给定key设置过期时间 |
KEYS pattern | 查找所有符合给定模式(pattern)的 key |
RENAME key newkey | 修改key的名称 |
TYPE key | 返回key所储存的值的类型 |
更多命令请参考:https://redis.io/commands
1 字符串类型
字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,一个字符串类型键允许存储的数据的最大容量是512MB,字符串类型是其它4种数据类型的基础,其它数据类型和字符串类型的差别从某种角度来说只是组织字符串的形式不同。
命令 | 作用 |
---|---|
SET key value | 设置指定key的值 |
GET key | 获取指定key的值 |
GETRANGE key start end | 返回key中字符串值的子字符 |
GETSET key value | 将给定key的值设为value,并返回key的旧值 |
MGET key1 [key2..] | 获取所有(一个或多个)给定key的值 |
MSET key value [key value …] | 同时设置一个或多个key-value对 |
INCR key | 将key中储存的数字值增一 |
INCRBY key increment | 将key所储存的值加上给定的增量值(increment) |
INCRBYFLOAT key increment | 将key所储存的值加上给定的浮点增量值(increment) |
DECR key | 将key中储存的数字值减一 |
DECRBY key decrement | key所储存的值减去给定的减量值(decrement) |
APPEND key value | 如果key已经存在并且是一个字符串,APPEND命令将指定的value追加到该key原来值的末尾 |
GETBIT key offset | 对key所储存的字符串值,获取指定偏移量上的位(bit) |
SETBIT key offset value | 对key所储存的字符串值,设置或清除指定偏移量上的位(bit) |
STRLEN key | 返回key所储存的字符串值的长度 |
更多命令请参考:https://redis.io/commands
2 散列类型
散列类型的键也是一种字典结构,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其它数据类型,散列类型适合存储对象,使用对象类别或ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。存储结构如下所示:
命令 | 作用 |
---|---|
HDEL key field1 [field2] | 删除一个或多个哈希表字段 |
HEXISTS key field | 查看哈希表key中,指定的字段是否存在 |
HGET key field | 获取存储在哈希表中指定字段的值 |
HGETALL key | 获取在哈希表中指定key的所有字段和值 |
HINCRBY key field increment | 为哈希表key中的指定字段的整数值加上增量(increment) |
HINCRBYFLOAT key field increment | 为哈希表key中的指定字段的浮点数值加上增量(increment) |
HKEYS key | 获取所有哈希表中的字段 |
HLEN key | 获取哈希表中字段的数量 |
HMGET key field1 [field2] | 获取所有给定字段的值 |
HMSET key field1 value1 [field2 value2 ] | 同时将多个field-value(域-值)对设置到哈希表key中 |
HSET key field value | 将哈希表key中的字段field的值设为value |
HSETNX key field value | 只有在字段field不存在时,设置哈希表字段的值 |
HVALS key | 获取哈希表中所有值 |
HSCAN key cursor [MATCH pattern] [COUNT count] | 迭代哈希表中的键值对 |
更多命令请参考:https://redis.io/commands
3 列表类型
列表类型可以存储一个有序的字符串序列,常用的操作是向列表两端添加元素或者是或得列表的某一个片段,其内部是使用双向链表实现的,可以方便的获得两端的数据,但是访问中间数据速度较慢。
命令 | 作用 |
---|---|
LLEN key | 获取列表长度 |
LPUSH key value1 [value2] | 将一个或多个值插入到列表头部 |
RPUSH key value1 [value2] | 将一个或多个值插入到列表尾部 |
LPOP key | 移出并获取列表的第一个元素 |
RPOP key | 移除并获取列表最后一个元素 |
LINDEX key index | 通过索引获取列表中的元素 |
LINSERT key BEFORE|AFTER pivot value | 在列表的元素前或者后插入元素 |
LPUSHX key value | 将一个值插入到已存在的列表头部 |
LRANGE key start stop | 获取列表指定范围内的元素 |
LREM key count value | 移除列表元素 |
LSET key index value | 通过索引设置列表元素的值 |
LTRIM key start stop | 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除 |
更多命令请参考:https://redis.io/commands
4 集合类型
集合类型是不具有有序性,但是其中元素具有唯一性,常用操作是向集合中加入或删除元素、判断某个元素是否存在等,集合元素在Redis内部是使用值为空的散列表实现的,所以这些操作的时间复杂度都是O(1),最方便的是多个集合类型键之间还可以进行并集、交集和差集运算。
命令 | 作用 |
---|---|
SADD key member1 [member2] | 向集合添加一个或多个成员 |
SREM key member1 [member2] | 移除集合中一个或多个成员 |
SPOP key | 移除并返回集合中的一个随机元素 |
SISMEMBER key member | 判断member元素是否是集合key的成员 |
SMEMBERS key | 返回集合中的所有成员 |
SCARD key | 获取集合的成员数 |
SDIFF key1 [key2] | 返回给定所有集合的差集 |
SDIFFSTORE destination key1 [key2] | 返回给定所有集合的差集并存储在destination中 |
SINTER key1 [key2] | 返回给定所有集合的交集 |
SINTERSTORE destination key1 [key2] | 返回给定所有集合的交集并存储在destination中 |
SUNION key1 [key2] | 返回所有给定集合的并集 |
SUNIONSTORE destination key1 [key2] | 所有给定集合的并集存储在destination集合中 |
SSCAN key cursor [MATCH pattern] [COUNT count] | 迭代集合中的元素 |
更多命令请参考:https://redis.io/commands
5 有序集合类型
有序集合类型为集合中的每个元素都关联了一个分数,可以通过分数实现集合元素的排序。
命令 | 作用 |
---|---|
ZADD key score1 member1 [score2 member2] | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 |
ZCARD key | 获取有序集合的成员数 |
ZCOUNT key min max | 计算在有序集合中指定区间分数的成员数 |
ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量increment |
ZINTERSTORE destination numkeys key [key …] | 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合key中 |
ZLEXCOUNT key min max | 在有序集合中计算指定字典区间内成员数量 |
ZRANGE key start stop [WITHSCORES] | 通过索引区间返回有序集合成指定区间内的成员 |
ZRANGEBYLEX key min max [LIMIT offset count] | 通过字典区间返回有序集合的成员 |
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] | 通过分数返回有序集合指定区间内的成员 |
ZRANK key member | 返回有序集合中指定成员的索引 |
ZREM key member [member …] | 移除有序集合中的一个或多个成员 |
ZREMRANGEBYLEX key min max | 移除有序集合中给定的字典区间的所有成员 |
ZREMRANGEBYRANK key start stop | 移除有序集合中给定的排名区间的所有成员 |
ZREMRANGEBYSCORE key min max | 移除有序集合中给定的分数区间的所有成员 |
ZREVRANGE key start stop [WITHSCORES] | 返回有序集中指定区间内的成员,通过索引,分数从高到底 |
ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集中指定分数区间内的成员,分数从高到低排序 |
ZREVRANK key member | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 |
ZSCORE key member | 返回有序集中,成员的分数值 |
ZUNIONSTORE destination numkeys key [key …] | 计算给定的一个或多个有序集的并集,并存储在新的 key 中 |
ZSCAN key cursor [MATCH pattern] [COUNT count] | 迭代有序集合中的元素(包括元素成员和元素分值) |
更多命令请参考:https://redis.io/commands
注意:列表类型和有序集合类型的区别
- 列表类型是通过链表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间元素的速度回较慢
- 有序集合类型是使用散列表和跳跃表实现的,所以即使读取位于中间部分的数据速度也很快
- 列表中不能简单地调整某个元素的位置,但是有序集合可以
- 有序集合要比列表类型更耗费内存