字符串String
string是Redis最基本的类型,一个key对应一个value。string 类型是二进制安全的,string可以包含任何数据。比如jpg图片或者序列化的对象。string类型的值最大能存储512MB
- SET key value [EX seconds] [PX milliseconds] [NX|XX]
将字符串值value关联到key,如果key已经被设置了其他值,set会把旧值覆盖,无视类型。当set对一个带有生存时间的键进行了设置之后,该键原有的TTL将被清除
EX:设置过期时间秒
PX:设置过期时间毫秒
NX:只在该键不存在的时候才进行操作
XX:只在该键已存在的时候才进行操作 - GET key
返回与键key相关联的字符串的值。如果键key不存在则返回特殊值nil,如果键key的值不是字符串类型就会返回一个错误 - GETSET key value
将键key的值设置为value,并返回被设置之前的旧值,如果键key没有旧值那么返回nil,但新值依然会被正常设置 - STRLEN key
返回键key存储的字符串值的长度,当键key不存在时,返回0 - APPEND key value
如果键key已经存在了并且它的值是一个字符串,那么这个命令会把value的值追加到key现有值的末尾,如果键key不存在,这个命令就是把键key的值设为value。无论key是否存在,命令的返回值都是键key的值的长度 - SETRANGE key offset value
从偏移量offset开始,用value覆盖键key原有的值,如果键key的原值比偏移量小,原值和偏移量之前的空白用\x00
来填充,不存在的键key当做空白字符串处理。这个指令返回修改后的字符串的长度
127.0.0.1:6379> set k1 012345
OK
127.0.0.1:6379> SETRANGE k1 1 aa
(integer) 6
127.0.0.1:6379> get k1
"0aa345"
127.0.0.1:6379> SETRANGE k3 10 12345
(integer) 15
127.0.0.1:6379> get k3
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0012345"
127.0.0.1:6379>
- GETRANGE key start end
返回键key对应的value的指定部分,由start和end两个变量指定(包含start和end),负数表示从末尾开始计数,-1表示最后一个字符。范围不会超过字符串本身长度,超过会被忽略 - INCR key
为键key存储的数字+1,如果键key不存在,那么它的值会被初始化为0,然后再执行INCR
命令,也就是说对一个不存在的key执行INCR
后再GET
得到的是1。如果键key存储的值不能解释为数字,那么这个命令会报错 - INCRBY key increment
为键key存储的数字加上increment,如果键key不存在,那么它的值会被初始化为0,然后再执行INCRBY
命令。如果键key存储的值不能解释为数字,那么这个命令会报错 - INCRBYFLOAT key increment
INCRBY的浮点数增量版本 - DECR key
为键key存储的数字值-1,其他说明和INCR
一致 - DECRBY key decrement
为键key存储的数字减去decrement,其他说明和INCRBY
一致 - MSET key value [key value …]
同时为多个键设置值。如果某个给定的键已经存在了,那么MSET
会用新值去覆盖旧值。这是一个原子性的操作,所有的键会在同一时间内被赋值 - MSETNX key value [key value …]
当且仅当所有的键都不存在的时候,给所有的键赋值。赋值列表中存在一个已经有值了的key会操作失败 - MGET key [key …]
返回给定的一个或多个字符串键的值。命令会返回一个列表,如果某个键不存在,这个键的值用nil
表示
哈希Hash
Hash是一个键值对集合。有三个元素组成:hash、field、value。其中hash是key有点像Map<String,Object>中的String,而field(域)则相当于Object对象里面的一个属性,value是属性对应的值。
- HSET hash field value
将哈希表hash
中的field
的值设置为value
,如果给定的哈希表(hash)不存在,将创建一个并执行HSET操作,如果field已经存在于哈希表中,那么它的旧值将被新值value
覆盖 - HSETNX hash field value
当field的值不存在的时候才赋值,如果以及存在了则放弃操作 - HGET hash field
返回hash表中给定field的值,如果hash或fiel不存在则返回nil - HEXISTS hash field
检查hash中的field是否存在,存在返回1,不存在返回0 - HDEL hash field [field …]
删除哈希表中的一个或多个field,不存在的field将被忽略 - HLEN hash
返回hash中field的数量,当hash不存在的时候返回0 - HSTRLEN hash field
返回hash中指定field对应的值的字符串长度 - HINCRBY hash field increment
为hash中的field对应的值加上增量increment,当然这个值可以是负数,如果hash不存在则创建一个新的hash并执行HINCRBY命令,如果field不存在,在执行命令之前,field的值初始化为0,对一个存储字符串值的field执行这个命令会报错 - HINCRBYFLOAT hash field increment
HINCRBY命令的浮点数版本 - HMSET hash field value [field value …]
同时将多个field-value的值设置进hash中,如果hash不存在,则先创建一个空的hash然后执行HMSET操作 - HMGET hash field [field …]
返回hash中一个或多个field的值,不存在的hash当做空哈希表来处理 - HKEYS hash
返回hash中所有的field(object中的属性) - HVALS hash
返回hash中所有field对应的值(object中属性的值) - HGETALL hash
返回hash中所有的field和对应的值,每个field后面紧跟着它的值
127.0.0.1:6379> HGETALL user
1) "username"
2) "zhj"
3) "usersex"
4) "man"
5) "userage"
6) "24"
7) "useraddress"
8) "dalian"
127.0.0.1:6379>
列表List
Redis的列表就是一个键key对应了一组value,Redis的列表底层是一个双向链表,所以可以从两头插入
- LPUSH key value [value …]
将一个或多个value插入到key所对应的列表的表头,如果key不存在,会创建一个空的列表再进行LPUSH操作。插入多个数据时候,因为每次都是向头部插入,所以LPUSH nums 1 2 3 4
在列表中对应的是4321 - LPUSHX key value [value …]
将一个或多个value值插入到key所对应的列表的表头,如果key不存在则什么也不做 - RPUSH key value [value …]
把value插入到列表的尾部,其他参考LPUSH - RPUSHX key value
把value插入到列表的尾部,其他参考LPUSHX - LPOP key
移除并返回key对应列表的头部元素,当key不存在的时候返回nil - RPOP key
移除并返回key对应列表的尾部元素,当key不存在的时候返回nil - RPOPLPUSH source destination
先将列表source
的尾部元素弹出返回客户端,然后把这个元素插入到destination
列表的头部。这是一个原子操作,但如果source
不存在则返回客户端一个nil,并且不执行后面的操作。如果destination
不存在,则会先创建一个空列表然后执行LPUSH
。如果source
和destination
相同则是返回尾部元素,并把尾部元素移到头部 - LREM key count value
根据count
的值,移除列表中与参数value
相等的元素
count>0:从表头开始向表尾搜索,移除与value相等的元素,数量为count
count<0:从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值
count=0:移除表中所有与value相等的值 - LLEN key
返回列表key的长度,如果列表不存在则返回0 - LINDEX key index
返回列表key中,下标为index的元素,第一个元素下标是0,-1表示最后一个元素。如果下标超过列表区间范围返回nil - LINSERT key BEFORE|AFTER pivot value
将值value插入列表key中,位于值pivot的之前或之后,当key或pivot不存在的时候,不进行任何操作 - LSET key index value
把列表key中下标为index的元素的值设置为value,当key列表不存在或index超出范围时报错 - LRANGE key start stop
返回列表key
中指定区间的元素,包含start
和stop
,下标0代表第一个元素,-1代表最后一个元素。如果start的下标比列表最大下标都大则返回空列表。如果stop
下标比end
大,Redis会将stop
的值设置为end
- LTRIM key start stop
使列表key清除其他元素,只保留指定区间的元素,包含指定区间 - BLPOP key [key …] timeout
是LPOP
命令的阻塞版本,当给定列表内没有任何元素可供弹出时,连接会被BLPOP
命令阻塞,知道等待超时或发现可弹出元素为止,当给定多个key
列表时候,按照参数key
的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。timeout
的单位是秒,当timeout
的值为0时,代表可以无限期阻塞,直到可以弹出一个元素为止 - BRPOP key [key …] timeout
弹出尾部元素,其他行为和BLPOP
一致 - BRPOPLPUSH source destination timeout
当source不为空的时候,行为和RPOPLPUSH
一致
集合Set
Set是String类型的集合,是无序且每个元素唯一
- SADD key member [member …]
向集合key中添加一个或多个member
,集合中已经存在的member
会被忽略。如果key
不存在,则会先创建一个集合再添加member
- SISMEMBER key member
判断集合key中是否包含member
,包含返回1,不包含或key不存在返回0 - SPOP key
随机移除并返回给客户端一个元素,key不存在或集合为空时返回nil - SRANDMEMBER key [count]
- 没有count参数:返回集合中的一个随机元素
- count为正数:小于集合总数,返回一个包含count个元素的数组,数组元素各不相同。大于或等于集合总数则返回整个集合
- count为负数:返回一个数组,数组中的元素可能会反复出现多次,数组的长度为count的绝对值
上述都操作不会改变集合中的元素。
- SREM key member [member …]
移除集合key中的一个或多个member,集合中不存在的member会被忽略 - SMOVE source destination member
将member从集合source移动到destination,如果source不存在或不包含指定的member元素,SMOVE
不执行任何操作,否则将元素member从source中移除并添加到destination中,操作成功返回1,否则返回0 - SCARD key
返回集合key
中成员的数量,当key
不存在的时候返回0 - SMEMBERS key
返回集合key
中的所有成员,不存在的key
视为空集合 - SINTER key [key …]
返回一个集合的全部成员,这个集合是所有给定集合的交集。不存在的key被视为空集。当给定集合中有一个空集的时候那么返回值也是空集 - SINTERSTORE destination key [key …]
类似于SINTER
,但是这个命令将结果保存到destination
中,而不是仅仅返回结果集,如果destination
以及存在了那么将其覆盖,也就是说destination
可以是给定集合中的一个 - SUNION key [key …]
返回一个集合的全部成员,这个集合是所有给定集合的合集。不存在的key被视为空集 - SUNIONSTORE destination key [key …]
类似于SUNION
,但是将结果保存在destination
中 - SDIFF key [key …]
返回一个集合的全部成员,这个集合是所有给定集合的差集。不存在的key被视为空集 - SDIFFSTORE destination key [key …]
类似于SDIFF
,但是将结果保存在destination
中
有序集合SortedSet
Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。但每个元素都会关联一个double类型的分数。Redis通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复
- ZADD key [NX|XX] [CH] [INCR] score member [score member …]
将一个或多个member
及其score
值添加到有序集key
中,如果member已经在score中存在了,那么会更新这个member的值,并通过重新插入这个member
元素来保证它在正确的位置上。score
可以使整数或双精度浮点数。如果key
不存在则先创建一个空的有序集并执行ZADD
操作,返回值是被成功添加的新成员的数量,不包括被修改的成员。
NX:不更新存在的成员,只添加成员
XX:仅仅更新存在的成员,不添加新成员
CH:changed,修改返回值为发生变化的成员总数(新添加的和被更新分数的)
INCR:当指定这个选项时候,成员操作就等同于ZINCRBY
命令,此时score相当于increment - ZSCORE key member
返回有序集key中成员member对应的score值,如果member不是key的成员或key不存在,返回nil - ZINCRBY key increment member
为有序集key的成员member的score加上增量increment,这个值可以是负数,当key不存在,或member不是key的成员时,ZINCRBY key increment member
等同于ZADD key increment member
- ZCARD key
返回有序集key中成员的个数,当key不存在的时候返回0 - ZCOUNT key min max
返回有序集key中,score值在min和max(包含)之间的成员的数量。Redis区间默认都是闭区间,我们想使用开区间的时候可以在参数前加一个(
来标识这个参数是一个开区间 - ZRANGE key start stop [WITHSCORES]
返回有序集key中指定区间内的成员,成员位置按scor的值递增排列。0表示第一个成员,-1表示最后一个成员。可以使用WITHSCORES
选项来让member和score一并返回
127.0.0.1:6379> ZADD leave 1 a 2 b 3 c
(integer) 3
127.0.0.1:6379> ZRANGE leave 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> ZRANGE leave 0 -1 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "c"
6) "3"
127.0.0.1:6379>
- ZREVRANGE key start stop [WITHSCORES]
和ZRANGE
基本一样,但是它返回的值是score从大到小排列(降序) - ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
返回有序集key中,所有score在min和max之间的(包含)的成员,返回值按照score的值递增排列。LIMIT就像SQL中的分页一样。WITHSCORES
可以把member和score一同返回 - ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
和ZRANGEBYSCORE
基本一样,但是它返回的值是score从大到小排列(降序) - ZRANK key member
返回有序集key中,member成员的排名。其中有序集成员按score值递增(从小到大)顺序排列。最小成员排名是0 - ZREVRANK key member
返回有序集key中,member成员的排名。其中有序集成员按score值递减(从大到小)顺序排列。最大成员排名是0 - ZREM key member [member …]
移除有序集key中的member,不存在的成员将被忽略 - ZREMRANGEBYRANK key start stop
移除有序集key中指定区间内的所有成员,下标0代表第一个成员,-1代表最后一个成员 - ZREMRANGEBYSCORE key min max
移除有序集key中score在min和max之间的所有成员