redis学习笔记(2)

来源:互联网 发布:淘宝信誉查询 淘一兔 编辑:程序博客网 时间:2024/05/22 15:33

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) 0127.0.0.1:6379> DEL k1(integer) 1127.0.0.1:6379> DEL k2 k3 k4(integer) 3127.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 v1OK127.0.0.1:6379> APPEND k1 appendcontent(integer) 15127.0.0.1:6379> get k1"v1appendcontent"127.0.0.1:6379> EXISTS k2 #确保k2不存在(integer) 0127.0.0.1:6379> APPEND k2 nonek2(integer) 6127.0.0.1:6379> get k2"nonek2"

STRLEN key 返回 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。

127.0.0.1:6379> EXISTS k3(integer) 0127.0.0.1:6379> STRLEN k1(integer) 15127.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 range127.0.0.1:6379> set k3 3OK127.0.0.1:6379> INCR k3(integer) 4127.0.0.1:6379> get k3"4"127.0.0.1:6379> DECR k3(integer) 3127.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 = 6127.0.0.1:6379> INCRBY k3 3 (integer) 6127.0.0.1:6379> get k3"6"127.0.0.1:6379> INCRBY k4 3(integer) 3127.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 helloworldOK127.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) 10127.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) 5127.0.0.1:6379> LRANGE list1 0 -11) "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) 5127.0.0.1:6379> LRANGE list2 0 -11) "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 -11) "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) 6127.0.0.1:6379> LRANGE list3 0 -11) "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) 11127.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) 2127.0.0.1:6379> LRANGE list 0 -11) "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 -11) "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 3OK127.0.0.1:6379> LRANGE list 0 -11) "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) 3127.0.0.1:6379> LRANGE list 0 -11) "b"2) "a"3) "2"4) "2"127.0.0.1:6379> LRANGE list2 0 -11) "5"2) "4"3) "3"127.0.0.1:6379> RPOPLPUSH list list2"2"127.0.0.1:6379> LRANGE list2 0 -11) "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 -11) "2"2) "5"3) "4"4) "3"127.0.0.1:6379> LSET list2 1 changeOK127.0.0.1:6379> LRANGE list2 0 -11) "2"2) "change"3) "4"4) "3"// 值1 不存在,不进行操作127.0.0.1:6379> LINSERT list2 before 1 mysql(integer) -1127.0.0.1:6379> LRANGE list2 0 -11) "2"2) "change"3) "4"4) "3"127.0.0.1:6379> LINSERT list2 before change mysql(integer) 5127.0.0.1:6379> LRANGE list2 0 -11) "2"2) "mysql"3) "change"4) "4"5) "3"127.0.0.1:6379> LINSERT list2 after change redis(integer) 6127.0.0.1:6379> LRANGE list2 0 -11) "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) 3127.0.0.1:6379> SMEMBERS set011) "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) 1127.0.0.1:6379> SMEMBERS set011) "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) 12127.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 41) "0"2) "b"3) "4"4) "7"127.0.0.1:6379> SRANDMEMBER set2 41) "3"2) "0"3) "c"4) "a"127.0.0.1:6379> SRANDMEMBER set2 41) "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) 1127.0.0.1:6379> SMEMBERS set21) "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) 4127.0.0.1:6379> SADD setKey2 java c# javascript mysql(integer) 4127.0.0.1:6379> SMEMBERS setKey11) "mysql"2) "redis"3) "c++"4) "java"127.0.0.1:6379> SMEMBERS setKey21) "javascript"2) "c#"3) "mysql"4) "java"127.0.0.1:6379> SDIFF setKey1 setKey21) "redis"2) "c++"127.0.0.1:6379> SDIFF setKey2 setKey11) "c#"2) "javascript"#交集127.0.0.1:6379> SINTER setKey2 setKey11) "mysql"2) "java"#并集127.0.0.1:6379> SUNION setKey1 setKey21) "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' command127.0.0.1:6379> HGET hash01 id"1"127.0.0.1:6379> HSET hash01 id 2(integer) 0127.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 15910139428OK127.0.0.1:6379> HMGET user id name age phone nil1) "1"2) "marvel"3) "25"4) "15910139428"5) (nil)127.0.0.1:6379> HGETALL user1) "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 user1) "name"2) "age"3) "phone"127.0.0.1:6379> HVALS user1) "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) 5127.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 101) "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 -11) "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"
0 0
原创粉丝点击