Redis的五大数据类型。
String(字符串),Hash(哈希,类似java里的Map),List(列表),Set(集合),Zset(sorted set:有序集合)
string是redis最基本的类型,一个key对应一个value。
hash 是一个键值对集合,类似java中的Map《String,Object》。
list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。之所以说它是双向的,因为它可以在链表左,右两边分别操作。
set redis set无序的不可重复的集合,set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
Zset zset和set一样也是string类型元素的集合,且不允许重复。
Redis String
DEL DEL key [key …] 删除给定的一个或多个 key 。不存在的 key 会被忽略。
127.0.0.1:6379> KEYS *
1) "k4"
2) "k1"
3) "k3"
4) "k2"
127.0.0.1:6379> del k5
(integer) 0
127.0.0.1:6379> DEL k1
(integer) 1
127.0.0.1:6379> DEL k2 k3 k4
(integer) 3
127.0.0.1:6379> KEYS *
(empty list or set)
APPEND 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。
如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
127.0.0.1:6379> SET k1 v1
OK
127.0.0.1:6379> APPEND k1 appendcontent
(integer) 15
127.0.0.1:6379> get k1
"v1appendcontent"
127.0.0.1:6379> EXISTS k2 #确保k2不存在
(integer) 0
127.0.0.1:6379> APPEND k2 nonek2
(integer) 6
127.0.0.1:6379> get k2
"nonek2"
STRLEN key 返回 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。
127.0.0.1:6379> EXISTS k3
(integer) 0
127.0.0.1:6379> STRLEN k1
(integer) 15
127.0.0.1:6379> STRLEN k3
(integer) 0
INCR key
将 key 中储存的数字值增一。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
DECR 和INCR相反
127.0.0.1:6379> INCR k1
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set k3 3
OK
127.0.0.1:6379> INCR k3
(integer) 4
127.0.0.1:6379> get k3
"4"
127.0.0.1:6379> DECR k3
(integer) 3
127.0.0.1:6379> get k3
"3"
INCRBY key increment 将 key 所储存的值加上增量 increment 。
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。
如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。
同样的有DECRBY key decrement
127.0.0.1:6379> get k3
"3"
# 3 + 3 = 6
127.0.0.1:6379> INCRBY k3 3
(integer) 6
127.0.0.1:6379> get k3
"6"
127.0.0.1:6379> INCRBY k4 3
(integer) 3
127.0.0.1:6379> get k4
"3"
GETRANGE key start end
返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个,以此类推。
SETRANGE key offset value
用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。不存在的 key 当作空白字符串处理。**
127.0.0.1:6379> set k1 helloworld
OK
127.0.0.1:6379> GETRANGE k1 0 -1
"helloworld"
127.0.0.1:6379> GETRANGE k1 0 2
"hel"
127.0.0.1:6379> SETRANGE k1 5 "redis"
(integer) 10
127.0.0.1:6379> get k1
"helloredis"
Redis List
LPUSH key value [value …]
将一个或多个值 value 插入到列表 key 的表头(left push 从左到右;依次插入。先进后出)
RPUSH key value [value …]和LPUSH相反
**LPOP key
移除并返回列表 key 的头元素。同样的RPOP会移除并返回列表 key 的尾元素。
127.0.0.1:6379> KEYS *
(empty list or set)
127.0.0.1:6379> LPUSH list1 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LRANGE list1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> LPOP list1
"5"
127.0.0.1:6379> RPOP list1
"1"
127.0.0.1:6379> RPUSH list2 1 2 3 4 5
(integer) 5
127.0.0.1:6379> LRANGE list2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> LPOP list2
"1"
127.0.0.1:6379> RPOP list2
"5"
127.0.0.1:6379> LRANGE list1 0 -1
1) "4"
2) "3"
3) "2"
LINDEX key index
返回列表 key 中,下标为 index 的元素。
下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
127.0.0.1:6379> LPUSH list3 a b c d e f
(integer) 6
127.0.0.1:6379> LRANGE list3 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> LINDEX list3 0
"f"
127.0.0.1:6379> LINDEX list3 1
"e"
127.0.0.1:6379> LINDEX list3 6
(nil)
127.0.0.1:6379> LLEN list3
(integer) 6
LREM key count value
根据参数 count 的值,移除列表中与参数 value 相等的元素。
count 的值可以是以下几种:
count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
count = 0 : 移除表中所有与 value 相等的值。
127.0.0.1:6379> LPUSH list 1 1 1 2 2 2 2 a a a b
(integer) 11
127.0.0.1:6379> LRANGE list 0 -1
1) "b"
2) "a"
3) "a"
4) "a"
5) "2"
6) "2"
7) "2"
8) "2"
9) "1"
10) "1"
11) "1"
127.0.0.1:6379> LREM list 2 a
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "b"
2) "a"
3) "2"
4) "2"
5) "2"
6) "2"
7) "1"
8) "1"
9) "1"
LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
举个例子,执行命令 LTRIM list 0 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。
下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。
你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
当 key 不是列表类型时,返回一个错误。
127.0.0.1:6379> LRANGE list 0 -1
1) "b"
2) "a"
3) "2"
4) "2"
5) "2"
6) "2"
7) "1"
8) "1"
9) "1"
//b的索引为0,LTRIM list 0 3 会把索引从0 到3的截取出来重新赋值list。
127.0.0.1:6379> LTRIM list 0 3
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "b"
2) "a"
3) "2"
4) "2"
RPOPLPUSH source destination
命令 RPOPLPUSH 在一个原子时间内,执行以下两个动作:
将列表 source 中的最后一个元素(尾元素)弹出,并返回给客户端。
将 source 弹出的元素插入到列表 destination ,作为 destination 列表的的头元素。
127.0.0.1:6379> LPUSH list2 3 4 5
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "b"
2) "a"
3) "2"
4) "2"
127.0.0.1:6379> LRANGE list2 0 -1
1) "5"
2) "4"
3) "3"
127.0.0.1:6379> RPOPLPUSH list list2
"2"
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "5"
3) "4"
4) "3"
/**
*这里将RPOPLPUSH source destination(RPOPLPUSH list list2) 拆分开容易理解,rpop 移除并返回列表 key 的尾元素(将list 的尾元素移除也就是2),lpush将一个或多个值 value 插入到列表 key 的表头,(这里是将list移除的2插入到list2中的表头中)。
*/
LSET key index value
将列表 key 下标为 index 的元素的值设置为 value 。
当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。
LINSERT key BEFORE|AFTER pivot value
将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。
当 pivot 不存在于列表 key 时,不执行任何操作。
当 key 不存在时, key 被视为空列表,不执行任何操作。
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "5"
3) "4"
4) "3"
127.0.0.1:6379> LSET list2 1 change
OK
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "change"
3) "4"
4) "3"
// 值1 不存在,不进行操作
127.0.0.1:6379> LINSERT list2 before 1 mysql
(integer) -1
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "change"
3) "4"
4) "3"
127.0.0.1:6379> LINSERT list2 before change mysql
(integer) 5
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "mysql"
3) "change"
4) "4"
5) "3"
127.0.0.1:6379> LINSERT list2 after change redis
(integer) 6
127.0.0.1:6379> LRANGE list2 0 -1
1) "2"
2) "mysql"
3) "change"
4) "redis"
5) "4"
6) "3"
Redis Set
SADD key member [member …]
将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
SMEMBERS key
返回集合 key 中的所有成员。
127.0.0.1:6379> SADD set01 abc 2 2 cd
(integer) 3
127.0.0.1:6379> SMEMBERS set01
1) "cd"
2) "2"
3) "abc"
SCARD key
返回集合 key 的基数(集合中元素的数量)。
127.0.0.1:6379> SCARD set01
(integer) 3
SREM key member [member …]
移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。
127.0.0.1:6379> SREM set01 2
(integer) 1
127.0.0.1:6379> SMEMBERS set01
1) "cd"
2) "abc"
SRANDMEMBER key [count]
如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素。
127.0.0.1:6379> SADD set2 0 1 2 3 4 5 6 7 8 a b c
(integer) 12
127.0.0.1:6379> SMEMBERS set2
1) "a"
2) "b"
3) "2"
4) "1"
5) "8"
6) "3"
7) "4"
8) "7"
9) "6"
10) "5"
11) "0"
12) "c"
127.0.0.1:6379> SRANDMEMBER set2 4
1) "0"
2) "b"
3) "4"
4) "7"
127.0.0.1:6379> SRANDMEMBER set2 4
1) "3"
2) "0"
3) "c"
4) "a"
127.0.0.1:6379> SRANDMEMBER set2 4
1) "8"
2) "0"
3) "a"
4) "6"
SPOP key
移除并返回集合中的一个随机元素。
如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER 命令。
127.0.0.1:6379> SMEMBERS set2
1) "a"
2) "b"
3) "2"
4) "1"
5) "8"
6) "3"
7) "4"
8) "7"
9) "6"
10) "5"
11) "0"
12) "c"
127.0.0.1:6379> SPOP set2
"c"
127.0.0.1:6379> SPOP set2
"0"
127.0.0.1:6379> SPOP set2
"3"
127.0.0.1:6379> SPOP set2
"a"
SMOVE source destination member
**将 member 元素从 source 集合移动到 destination 集合。如果 source 集合不存在或不包含指定的 member 元素,则 SMOVE 命令不执行任何操作,仅返回 0 。否则, member 元素从 source 集合中被移除,并添加到 destination 集合中去。当 destination 集合已经包含 member 元素时, SMOVE 命令只是简单地将 source 集合中的 member 元素删除。
当 source 或 destination 不是集合类型时,返回一个错误。**
127.0.0.1:6379> SMOVE set01 set2 abc
(integer) 1
127.0.0.1:6379> SMEMBERS set2
1) "b"
2) "2"
3) "1"
4) "8"
5) "abc"
6) "4"
7) "7"
8) "6"
9) "5"
SDIFF key [key …]
返回一个集合的全部成员,该集合是所有给定集合之间的差集。
SINTER key [key …]
返回一个集合的全部成员,该集合是所有给定集合的交集。
SUNION key [key …]
返回一个集合的全部成员,该集合是所有给定集合的并集。
#差集
127.0.0.1:6379> SADD setKey1 java c++ mysql redis
(integer) 4
127.0.0.1:6379> SADD setKey2 java c# javascript mysql
(integer) 4
127.0.0.1:6379> SMEMBERS setKey1
1) "mysql"
2) "redis"
3) "c++"
4) "java"
127.0.0.1:6379> SMEMBERS setKey2
1) "javascript"
2) "c#"
3) "mysql"
4) "java"
127.0.0.1:6379> SDIFF setKey1 setKey2
1) "redis"
2) "c++"
127.0.0.1:6379> SDIFF setKey2 setKey1
1) "c#"
2) "javascript"
#交集
127.0.0.1:6379> SINTER setKey2 setKey1
1) "mysql"
2) "java"
#并集
127.0.0.1:6379> SUNION setKey1 setKey2
1) "c#"
2) "javascript"
3) "redis"
4) "c++"
5) "java"
6) "mysql"
Redis Hash
**HSET key field value
将哈希表 key 中的域 field 的值设为 value 。
如果 key 不存在,一个新的哈希表被创建并进行 HSET 操作。
如果域 field 已经存在于哈希表中,旧值将被覆盖。**
127.0.0.1:6379> HSET hash01 id 1
(integer) 1
#127.0.0.1:6379> HGET hash01
#(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> HGET hash01 id
"1"
127.0.0.1:6379> HSET hash01 id 2
(integer) 0
127.0.0.1:6379> HGET hash01 id
"2"
**HMSET key field value [field value …]
同时将多个 field-value (域-值)对设置到哈希表 key 中。**
**HMGET key field [field …]
返回哈希表 key 中,一个或多个给定域的值。
如果给定的域不存在于哈希表,那么返回一个 nil 值。**
HGETALL key
返回哈希表 key 中,所有的域和值。
127.0.0.1:6379> hmset user id 1 name marvel age 25 phone 15910139428
OK
127.0.0.1:6379> HMGET user id name age phone nil
1) "1"
2) "marvel"
3) "25"
4) "15910139428"
5) (nil)
127.0.0.1:6379> HGETALL user
1) "id"
2) "1"
3) "name"
4) "marvel"
5) "age"
6) "25"
7) "phone"
8) "15910139428"
127.0.0.1:6379> HLEN user
(integer) 4
HGETALL key是返回哈希表 key 中,所有的域和值。如果是单独获取所有的key或者value
HKEYS 返回哈希表 key 中的所有域。HVALS 返回哈希表 key 中所有域的值。
127.0.0.1:6379> HKEYS user
1) "name"
2) "age"
3) "phone"
127.0.0.1:6379> HVALS user
1) "marvel"
2) "25"
3) "15910139428"
Redis Zset
ZADD key score member [[score member] [score member] …]
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
**ZRANGE key start stop [WITHSCORES]
返回有序集 key 中,指定区间内的成员。
其中成员的位置按 score 值递增(从小到大)来排序。
具有相同 score 值的成员按字典序(lexicographical order )来排列。
如果你需要成员按 score 值递减(从大到小)来排列,请使用 ZREVRANGE 命令。*
可以通过使用 WITHSCORES 选项,来让成员和它的 score 值一并返回,返回列表以 value1,score1, …, valueN,scoreN 的格式表示。*
127.0.0.1:6379> ZADD zset1 9 scoreA 8 scoreB 10 score+ 5 scoreD 6 scoreC
(integer) 5
127.0.0.1:6379> ZRANGE zset1 0 -1 withscores
1) "scoreD"
2) "5"
3) "scoreC"
4) "6"
5) "scoreB"
6) "8"
7) "scoreA"
8) "9"
9) "score+"
10) "10"
127.0.0.1:6379> ZREVRANGE zset1 0 -1 withscores
1) "ageA"
2) "19"
3) "ageB"
4) "18"
5) "scoreE"
6) "16"
7) "scoreD"
8) "15"
9) "score+"
10) "10"
11) "ageC"
12) "10"
13) "scoreA"
14) "9"
15) "scoreB"
16) "8"
17) "scoreC"
18) "6"
**ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。具有相同 score 值的成员按字典序(lexicographical order)来排列(该属性是有序集提供的,不需要额外的计算)。
127.0.0.1:6379> ZRANGEBYSCORE zset1 6 10
1) "scoreC"
2) "scoreB"
3) "scoreA"
4) "ageC"
5) "score+"
127.0.0.1:6379> ZRANGEBYSCORE zset1 6 10 withscores
1) "scoreC"
2) "6"
3) "scoreB"
4) "8"
5) "scoreA"
6) "9"
7) "ageC"
8) "10"
9) "score+"
10) "10"
127.0.0.1:6379> ZRANGEBYSCORE zset1 (6 10
1) "scoreB"
2) "scoreA"
3) "ageC"
4) "score+"
127.0.0.1:6379> ZRANGEBYSCORE zset1 (6 (10
1) "scoreB"
2) "scoreA"
ZREM key member [member …]
移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。
127.0.0.1:6379> ZREM zset1 ageA
(integer) 1
//ZCARD key
//返回有序集 key 的基数。
127.0.0.1:6379> ZCARD zset1
(integer) 8
//ZCOUNT key min max
//返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。
127.0.0.1:6379> ZCOUNT zset1 6 18
(integer) 8
ZRANK key member
返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。
127.0.0.1:6379> ZRANGE zset1 0 -1
1) "scoreC"
2) "scoreB"
3) "scoreA"
4) "ageC"
5) "score+"
6) "scoreD"
7) "scoreE"
8) "ageB"
127.0.0.1:6379> ZRANK zset1 ageB
(integer) 7
ZSCORE key member
返回有序集 key 中,成员 member 的 score 值。
ZINCRBY key increment member
为有序集 key 的成员 member 的 score 值加上增量 increment 。
127.0.0.1:6379> ZSCORE zset1 ageB
"18"
127.0.0.1:6379> ZINCRBY zset1 18 ageB
"36"