Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
1、SET key "value"---设置指定key的值
设置成功返回 OK,value值要加双引号
2、GET key ---获取指定key的值
3、GETRANGE key start end ---返回key中字符串的子字符串
start 和end决定字符串截取的位置和长度。
4、GETSET key value ---给指定key设置值,并返回key的旧值。
若key没有旧值,则返回nil
5、GETBIT key offiset ---对 key 所储存的字符串值,获取指定偏移量上的位(bit)
当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0
6、MGET key1[key2...] ---获取一个或多个给定的key值
若给定的key中,有某个key不存在,则返回这个key的特殊值nil
7、SETBIT key offset [value] ----对key所存储的字符串值,设置或清除指定偏移量上的位
返回指定偏移量原存储的位
8、SETEX key seconds value ----设置key的值,并将key的过期时间设为seconds秒
若key已经存在,替换key的旧值。设置成功返回OK
9、SETNX key value --- 只在key不存在时设置key值
设置成功返回1,设置失败返回0
10、SETRANGE key offset value ---从偏移量offset开始,用value覆写给key的值
返回被修改后的字符串长度
11、STRLEN key ---返回key所存储的字符串长度
若key不存在,返回0
12、MSET key value[key value.....]---同时设置多个key--value对
返回OK
13、MSETNX key value[key value....]---同时设置多个key--value对,仅在所有key都不存在时成功
成功返回1,失败返回0. Msetnx是原子性操作,都成功或都失败。
14、PSETEX key milliseconds value ---以毫秒为单位设置key的有效期
设置成功返回OK
15、INCR key ----将key中存储的数字值增一
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
16、INCRBY key increment ---将key所存储的值加上指定增量increment ......(规则同上)
17、INCRBYFLOAT key increment ---将key所存储的值加上给定浮点增量increment
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
本操作的值限制在 64 位(bit)有符号数字表示之内。
19、DECRYBY key decrement ---key所存储的数字值减去指定减量值
......(规则同上)
如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, APPEND 就简单地将给定 key 设为 value 。
Redis 哈希(Hash)
是一个string类型的field和value的映射表,hash特别适合用于存储对象
Redis哈希操作命令:
1、HDEL key field1[field2...] ---删除一个或多个哈希表字段,不存在的字段被忽略
返回被删除的字段的数量,不包括被忽略的字段
2、HEXISTS key field ---查看哈希表中指定字段是否存在
若哈希表中存在该字段,返回1;若key不存在或key中不存在该字段,返货0
3、HGET key field ---获取表中指定字段的值
返回指定字段值,若key或字段不存在则返回nil
4、HGETALL key ---获取表中所有的字段和值
以列表的形式返回哈希表的字段和值,若key不存在返回空列表。
5、HINCRBY key field increment ---为哈希表key中指定字段的整数值加上增量increment(可以为负数)
如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。
对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。
本操作的值被限制在 64 位(bit)有符号数字表示之内。
返回相加后的字段值
----(规则同上)
7、HKEYS key --- 获取哈希表中所有字段
包含哈希表中所有域(field)列表。当 key 不存在时,返回一个空列表。
8、HLEN key--- 获取哈希表中字段数量
返回哈希表中字段数量,若key不存在,返回0。
9、HMGET key field[field...] ---获取给定字段值
返回一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。
如果指定的字段不存在于哈希表,那么返回一个 nil 值。
10、HMSET key field1 value1[field2 value2....] ---同时给哈希表设置多个field - value值
此命令会覆盖哈希表中已存在的字段。
如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。
设置成功返回OK
11、HSET key field value ---将哈希表key中field字段值设置为value
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作;如果字段已经存在于哈希表中,旧值将被覆盖。
如果字段是哈希表中的一个新建字段,并且值设置成功,返回 1 。如果哈希表中域字段已经存在且旧值已被新值覆盖,返回 0 。
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作;如果字段已经存在于哈希表中,操作无效。
设置成功,返回 1 ;设置失败,返回 0 。
13、HVALS key ---获取key中所有字段的值,不包含field字段
14、HSCAN key cursor [MATCH pattern] [COUNT count] ----迭代哈希表中的键值对。
Redis 列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
Redis列表操作命令:
1、BLPOP key1[key2...] timeout ---移除并获取列表第一个元素,如果列表没有元素会阻塞列表直到等待超时
如果指定的列表 key list1 存在数据则会返回第一个元素,否则在等待timeout秒后会返回 nil
2、BRPOP key1[key2...] timeout ----移除并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时
假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key
第二个元素 是被弹出元素的值
3、BRPOPLPUSH source destination timeout ---从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;
如果列表没有元素会阻塞列表直到等待超时
假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。反之,返回一个含有两个元素的列表,第一个元素是被弹出元素的值
第二个元素是等待时长。
4、LINDEX key index ---通过索引获取列表中的元素
也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
列表中下标为指定索引值的元素。如果指定索引值不在列表的区间范围内,返回 nil 。
5、LINSERT key before/after pivot value ---在列表元素前/后插入元素
当指定列表key或元素不存在时,不执行任何操作。如果 key 不是列表类型,返回一个错误。
如果命令执行成功,返回插入操作完成之后,列表的长度。
如果没有找到指定元素 ,返回 -1 。如果 key 不存在或为空列表,返回 0
6、LLEN key ---获取列表长度
如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。如果 key 不是列表类型,返回一个错误。
7、LPOP key ---移除并获取列表第一个元素
返回列表的第一个元素。当列表 key 不存在时,返回 nil 。
8、LPUSH key value1[value2...] ---将一个或多个值插入到列表头部
返回执行 LPUSH 命令后,列表的长度。
9、LPUSHX key value ---将一个值插入到已存在列表的头部,若列表不存在操作无效。
返回执行 LPUSHX 命令后,列表的长度。
10、LRANGE key start stop ---获取列表指定范围内元素
0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推,你也可以使用负数下标。
返回一个列表,包含指定区间内的元素。
11、LREM key count value ---移除列表元素,根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
count = 0 : 移除表中所有与 VALUE 相等的值。
返回被移除元素的数量。列表不存在时返回 0 。
12、LSET key index value ---通过索引设置列表元素的值
当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。操作成功返回OK
13、LTRIM key start stop ---让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
操作成功返回OK
14、RPOP key ----移除并获取列表最后一个元素
15、RPOPLPUSH source destination ---命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
返回被弹出的元素。
16、RPUSH key value1[value2...] ---于将一个或多个值插入到列表的尾部(最右边)。
如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。当列表存在但不是列表类型时,返回一个错误。
返回执行 RPUSH 操作后,列表的长度。
17、RPUSHX key value ---将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。
返回执行 Rpushx 操作后,列表的长度。
Redis 集合(Set)
Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
Redis 集合操作命令:
1、SADD key member1[member2...] ---向集合添加一个或多个成员,已经存在于集合的成员元素将被忽略。
假如集合 key 不存在,则创建一个只包含添加的元素作成员的集合。当集合 key 不是集合类型时,返回一个错误。
返回被添加到集合中的新元素的数量,不包括被忽略的元素。
2、SCARD key ---获取集合的成员数,key不存在时返回0
3、SDIFF key1[ key2 ...] ----返回给定集合之间的差集,不存在的集合 key 将视为空集。
4、SDIFFSTORE destination key1[key2...] ---返回给定所有集合的差集并存储在指定集合 destination 中
返回结果集中的元素数量。
5、SINTER key1[ key2...] ---返回指定集合的交集
6、SINTERSTORE destination key1[key2] ---返回给定所有集合的交集并存储在指定集合 destination 中
如果成员元素是集合的成员,返回 1 。如果成员元素不是集合的成员,或 key 不存在,返回 0
8、SYSMEMBERS key ---返回集合中所有成员,不存在的集合 key 被视为空集合。
9、SMOVE source destination member ---将 member 元素从 source 集合移动到 destination 集合
SMOVE 是原子性操作。
如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。
否则, member 元素从 source 集合中被移除,并添加 到 destination 集合中去。
当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。
当 source 或 destination 不是集合类型时,返回一个错误。
10、SPOP key ----移除并返回集合中一个随机元素,当集合不存在或是空集时,返回 nil
11、SRANDMEMBER key [count] ----随机返回集合中一个或多个元素
如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,数组中的元素各不相同。如果 count 大于等于集合基数
那么返回整个集合。
如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
12、SREM key member1[menber2...] ---移除集合中的一个或多个成员元素,不存在的成员元素会被忽略
返回被成功移除的元素的数量,不包括被忽略的元素。
13、SUNION key1[key2...] ---返回给定集合的并集
14、SUNIONSTORE destination key1[key2...] ---所有给定集合的并集存储在 目标集合destination 中,如果 destination 已经存在,则将其覆盖。
返回结果集中的元素数量。
15、SSCAN key cursor [MATCH pattern] [COUNT count] ---迭代集合中的元素
返回数组列表
Redis 有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数,来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
Redis 有序集合操作命令:
1、ZADD key score1 menber1 [score2 member2 ......] ---- 向有序集合添加一个或多个成员,或更新已存在成员的分数。
如果某个成员已经是有序集的成员,那么更新这个成员的分数值,并通过重新插入这个成员元素,来保证该成员在正确的位置上。
返回被成功添加的新成员的数量,不包括那些被更新的、已经存在的成员。
2、ZCARD key ---- 获取有序集合的成员数,key 不存在时,返回 0
3、ZCOUNT key min max ---计算在有序集合中指定区间分数内的成员数
4、ZINCRBY key increment member ---对集合中指定成员分数加上增量increment
当 key 不存在,或分数不是 key 的成员时,创建指定集合和成员 。
5、ZINTERSTORE destination numkeys key[key...] ---计算给定的多个有序集的交集并将结果集存储在新的有序集destination中
默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。
返回保存到目标结果集的的成员数量。
6、ZLEXCOUNT key min max ---在有序集合中计算指定字典区间内成员数量
redis 127.0.0.1:6379> ZADD myzset 0 a 0 b 0 c 0 d 0 e (integer) 5 redis 127.0.0.1:6379> ZADD myzset 0 f 0 g (integer) 2 redis 127.0.0.1:6379> ZLEXCOUNT myzset - + (integer) 7 redis 127.0.0.1:6379> ZLEXCOUNT myzset [b [f (integer) 57、ZRANGE key start stop [WITHSCORES] ---返回集合中指定索引区间内成员
成员的位置按分数值递增(从小到大)来排序。具有相同分数值的成员按字典序(lexicographical order )来排列(值递减(从大到小)来排列,请使用ZREVRANGE 命令)。
下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,以 1 表示有序集第二个成员,以此类推。
你也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推。
8、ZRANGEBYLEX key min max [LIMIT offset count] ---通过字典区间返回有序集合的成员
9、ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] ---返回指定分数区间内成员
有序集成员按分数值递增(从小到大)次序排列
区间的取值默认使用闭区间 ,你也可以通过给参数前增加 “ ( ” 符号来使用可选的开区间 (小于或大于)。
10、ZRANK key member ----返回集合中指定成员索引(成员的排名)
如果成员不存在,返回 nil 。
11、ZREM key member [member ...] ----移除集合中的成员,不存在的成员将被忽略。
返回被成功移除的成员的数量,不包括被忽略的成员。
12、ZREMRANGEBYLEX key min max ---移除集合中给定字典区间内的成员
返回被成功移除的成员数量
13、ZREMRANGEBYRANK key start stop ----移除集合中给定排名区间的成员
返回被移除的成员数量
14、ZREMRANGEBYSCORE key min max ----移除集合中给定分数区间内的成员
15、ZREVRANGE key start stop [WITHSCORES] ----通过索引,返回集合中指定区间内的成员,降序排列
16、ZREVRANGEBYSCORE key max min [WITHSCORES] ----返回集合中指定分数区间内的成员,降序排列
17、ZREVRANK key member ----返回有序集合中指定成员的排名,有序集成员按分数值降序排列
18、ZSCORE key member ----返回集合中成员的分数值
19、ZUNIONSTORE destination numkeys key [key...] ----计算给定的一个或多个有序集的并集,并存储在新的集合destiantion中
numkeys 代表合并的集合数量
20、ZSCAN key cursor [MATCH pattern] [COUNT count] ----迭代有序集合中的元素(包括元素成员和元素分值)
返回的每个元素都是一个有序集合元素,一个有序集合元素由一个成员(member)和一个分值(score)组成。