Redis支持六种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。java
结构类型 | 存储的值 |
---|---|
string | 能够是字符串、浮点型、整型 |
list | 一个链表,链表上的每一个节点存放一个字符串 |
set | 包含字符串的无序容器,里面的每一个字符串都不相同 |
hash | 包含键值对的无序散列表 |
sorted set | 字符串与浮点数分值之间的有序映射,排列顺序由分值的大小决定 |
HyperLogLog | 基数统计 |
SET key value
设置指定 key
的值,若是值存在就覆盖(不加能够项的状况下)。redis
可选项:数据库
[EX seconds] [PX milliseconds] [NX|XX]
EX seconds
:表示过时时间,单位为秒PX milliseconds
:表示过时时间,单位为毫秒NX
:只有键 key
不存在的时候才会设置 key
的值XX
:只有键 key
存在的时候才会设置 key
的值GET key
获取指定 key
的值。若是该 key
有值返回值内容,不然返回 (nil)
表示空。安全
GETRANGE key start end
用于获取存储在指定 key
中字符串的子字符串。字符串的截取范围由 start
和 end
两个偏移量决定(包括 start
和 end
在内)。网络
GETSET key value
设置指定 key
的值,并返回 key
的旧值。若是 key
没有旧值时,即 key
不存在时,返回 nil
。数据结构
SETEX key TIMEOUT value
设置指定 key
的值并设置过时时间,等同于 SET key value EX seconds
优化
SETNX key value
当 key
不存在时才设置,等同于 SET key value NX
网站
STRLEN key
返回指定 key
的长度,不存在的 key
长度为 0。code
INCR key
指定 key
自增 1。若是 key 不存在,那么 key 的值会先被初始化为 0 ,而后再执行 INCR 命令。若是是自增的值不是整数或浮点数的话会报 (error) ERR value is not an integer or out of range
错误对象
INCRBY key INCR_AMOUNT
将 key
中储存的数字加上指定的增量值。若是 key
不存在,那么 key
的值会先被初始化为 0 ,而后再执行 INCRBY
命令。若是值包含错误的类型,或字符串类型的值不能表示为数字,那么也会返回上面的错误。
INCRBYFLOAT key INCR_AMOUNT
为 key
中所储存的值加上指定的浮点数增量值。若是 key
不存在,那么 INCRBYFLOAT 会先将 key
的值设为 0 ,再执行加法操做。
DECR key
与 INCR
相反,执行自减 1 操做
DECRBY key DECREMENT_AMOUNT
将 key
所储存的值减去指定的减量值。
APPEND key new_value
用于为指定的 key
追加值。
若是 key
已经存在而且是一个字符串, APPEND
命令将 value
追加到 key
原来的值的末尾。
若是 key
不存在, APPEND
就简单地将给定 key
设为 value
,就像执行 SET key value
同样。
MSET key1 value1 key2 value2 .. keyN valueN
用于同时设置一个或多个 key-value 对。
MSETNX key1 value1 key2 value2 .. keyN valueN
用于全部给定 key
都不存在时,同时设置一个或多个 key-value
对。若是其中有一个 key
存在,操做失败,由于操做上原子性的,全部 key
都没有设置。
MGET key1 key2 .. keyN
返回全部(一个或多个)给定 key
的值。 若是给定的 key
里面,有某个 key
不存在,那么这个 key
返回特殊值 nil
。
Redis hash
是一个 string
类型的 field
和 value
的映射表,hash
特别适合用于存储对象。Redis
中每一个 hash
能够存储 232 - 1 键值对(40多亿)。
HSET KEY_NAME FIELD VALUE
用于为哈希表中的字段赋值。若是哈希表不存在,一个新的哈希表被建立并进行 HSET
操做。若是字段已经存在于哈希表中,旧值将被覆盖。
HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN
用于同时将多个 field-value
(字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。若是哈希表不存在,会建立一个空哈希表,并执行 HMSET
操做。
HSETNX KEY_NAME FIELD VALUE
用于为哈希表中不存在的的字段赋值。若是哈希表不存在,一个新的哈希表被建立并进行 HSET
操做。若是字段已经存在于哈希表中,操做无效。
HLEN KEY_NAME
用于获取哈希表中字段的数量。当 key
不存在时,返回 0 。
HGET KEY_NAME FIELD_NAME
用于返回哈希表中指定字段的值。若是给定的字段或 key 不存在时,返回 nil。
HMGET KEY_NAME FIELD1...FIELDN
用于返回哈希表中,一个或多个给定字段的值。若是指定的字段不存在于哈希表,那么返回一个 nil
值。
HKEYS key [FIELD] [VALUE]
用于获取哈希表中的全部域(field
)。
HVALS KEY_NAME [FIELD] [VALUE]
一个包含哈希表中全部域(field
)值的列表。 当 key
不存在时,返回一个空表。
HEXISTS KEY_NAME FIELD_NAME
用于查看哈希表的指定字段是否存在。若是哈希表含有给定字段,返回 1。若是哈希表不含有给定字段或 key
不存在,返回 0。
HDEL KEY_NAME FIELD1.. FIELDN
用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。返回被成功删除字段的数量,不包括被忽略的字段。
Redis列表是简单的字符串列表,按照插入顺序排序。你能够添加一个元素到列表的头部(左边)或者尾部(右边)。
LPUSH KEY_NAME VLAUE [VALUE ...]
将一个或多个值插入到列表头部(左端)。
RPUSH KEY_NAME VLAUE [VALUE ...]
将一个或多个值插入到列表尾部(右端)。
LPOP key
移除并返回列表头部第一个元素。
RPOP key
移除并返回列表尾部第一个元素。
LINDEX key offset
返回列表中索引下标为 offset 的元素
LRANGE key start end
返回列表从 start 偏移量到 end 偏移量范围内的全部元素,包括(start 和 end)。
LTRIM key start end
对列表进行修剪,只保留从 start 偏移量到 end 偏移量范围内元素,包括(start 和 end)。
LLEN key
返回列表的长度。 若是列表 key
不存在,则 key
被解释为一个空列表,返回 0。
Redis
的 Set
是 String
类型的无序集合。集合成员是惟一的,这就意味着集合中不能出现重复的数据。Redis
中集合是经过哈希表实现的,因此添加,删除,查找的复杂度都是 O(1)。
SADD key value1..valueN
将一个或多个成员元素加入到集合中,已经存在于集合的成员元素将被忽略。返回添加成功的数量。
SREM key value1..valueN
用于移除集合中的一个或多个成员元素,不存在的成员元素会被忽略。返回移除成功的数量。
SISMEMBER KEY VALUE
判断成员元素是不是集合的成员。若是成员元素是集合的成员,返回 1。若是成员元素不是集合的成员或 key 不存在,返回 0。
SCARD KEY_NAME
回集合中元素的数量。当集合不存在时返回 0。
SPOP key [count]
用于移除集合中的指定 key 的一个或多个随机元素,移除后会返回移除的元素。
SUNION KEY KEY1..KEYN
返回给定集合的并集。不存在的集合 key 被视为空集。
SINTER KEY KEY1..KEYN
返回给定全部给定集合的交集。 不存在的集合 key 被视为空集。 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。
SDIFF FIRST_KEY OTHER_KEY1..OTHER_KEYN
返回给定集合之间的差集。不存在的集合 key 将视为空集。差集的结果来自前面的 FIRST_KEY ,而不是后面的 OTHER_KEY1,也不是整个 FIRST_KEY OTHER_KEY1..OTHER_KEYN 的差集。
SMEMBERS key
返回集合中的全部的成员。 不存在的集合 key 被视为空集合。
Sorted set
是 set
的一个升级版本,它在 set
的基础上增长了一个顺序属性,这一属性在添加修改元素时候能够指定,每次指定后,zset
会自动从新按新的值调整顺序。能够理解为有两列字段的数据表,一列存 value
,一列存顺序编号。操做中 key
理解为zset
的名字。
ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN
用于将一个或多个成员元素及其分数值加入到有序集当中。
若是某个成员已是有序集的成员,那么更新这个成员的分数值,并经过从新插入这个成员元素,来保证该成员在正确的位置上。
ZREM key member [member ...]
用于移除有序集中的一个或多个成员,不存在的成员将被忽略。
ZCARD
用于计算集合中元素的数量。
ZINCRBY key increment member
对有序集合中指定成员的分数加上增量 increment
ZCOUNT
计算在有序集合中指定区间分数的成员数
ZRANK key member
返回有序集中指定成员的排名。其中有序集成员按分数值递增(从小到大)顺序排列。
ZSCORE key member
返回有序集中,成员的分数值。 若是成员元素不是有序集 key 的成员,或 key 不存在,返回 nil 。
ZRANGE key start stop [WITHSCORES]
返回有序集中,指定区间内的成员。
基数计数(cardinality counting)一般用来统计一个集合中不重复的元素个数,例如统计某个网站的UV,或者用户搜索网站的关键词数量。数据分析、网络监控及数据库优化等领域都会涉及到基数计数的需求。
HyperLogLog
的优势是,在输入元素的数量或者体积很是很是大时,计算基数所需的空间老是固定的、而且是很小的。缺点就是有3%之内的偏差。
PFADD key element [element ...]
将全部元素参数添加到 HyperLogLog 数据结构中。
PFCOUNT key [key ...]
返回给定 HyperLogLog 的基数估算值。
PFMERGE destkey sourcekey [sourcekey ...]
命令将多个 HyperLogLog 合并为一个 HyperLogLog ,合并后的 HyperLogLog 的基数估算值是经过对全部 给定 HyperLogLog 进行并集计算得出的。