redis 数据类型
参考资料:http://www.redis.cn/topics/data-types.html
字符串(string)
字符串是所有编程语言中最常见的和最常用的数据类型,而且也是redis最基本的数据类型之一,而且redis中所有
的key的类型都是字符串。常用于保存Session信息场景,此数据类型比较常用
添加一个key
127.0.0.1:6379> set key1 value1 OK 127.0.0.1:6379> get key1 "value1" 127.0.0.1:6379> TYPE key1 string 127.0.0.1:6379> SET title1 ceo ex 3 #设置自动过期时间3s OK 127.0.0.1:6379> set NAME wang OK 127.0.0.1:6379> get NAME "wang" 127.0.0.1:6379> get name (nil) 127.0.0.1:6379> set name mage OK 127.0.0.1:6379> get name "mage" 127.0.0.1:6379> get NAME "wang"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 127.0.0.1 : 6379 > set key1 value1 OK 127.0.0.1 : 6379 > get key1 "value1" 127.0.0.1 : 6379 > TYPE key1 string 127.0.0.1 : 6379 > SET title1 ceo ex 3 #设置自动过期时间3s OK 127.0.0.1 : 6379 > set NAME wang OK 127.0.0.1 : 6379 > get NAME "wang" 127.0.0.1 : 6379 > get name ( nil ) 127.0.0.1 : 6379 > set name mage OK 127.0.0.1 : 6379 > get name "mage" 127.0.0.1 : 6379 > get NAME "wang" |
获取一个key的内容
127.0.0.1:6379> get key1 "value1"
1 2 | 127.0.0.1 : 6379 > get key1 "value1" |
删除一个和多个key
127.0.0.1:6379> DEL key1 (integer) 1 127.0.0.1:6379> DEL key1 key2 (integer) 2
1 2 3 4 5 | 127.0.0.1 : 6379 > DEL key1 ( integer ) 1 127.0.0.1 : 6379 > DEL key1 key2 ( integer ) 2 |
批量设置多个key
127.0.0.1:6379> MSET key1 value1 key2 value2 OK
1 2 | 127.0.0.1 : 6379 > MSET key1 value1 key2 value2 OK |
批量获取多个key
127.0.0.1:6379> MGET key1 key2 1) "value1" 2) "value2" 127.0.0.1:6379> KEYS n* 1) "n1" 2) "name" 127.0.0.1:6379> KEYS * 1) "k2" 2) "k1" 3) "key1" 4) "key2" 5) "n1" 6) "name" 7) "k3" 8) "title"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 127.0.0.1 : 6379 > MGET key1 key2 1 ) "value1" 2 ) "value2" 127.0.0.1 : 6379 > KEYS n* 1 ) "n1" 2 ) "name" 127.0.0.1 : 6379 > KEYS * 1 ) "k2" 2 ) "k1" 3 ) "key1" 4 ) "key2" 5 ) "n1" 6 ) "name" 7 ) "k3" 8 ) "title" |
追加数据
127.0.0.1:6379> APPEND key1 " append" (integer) 12 127.0.0.1:6379> get key1 "value1 append"
1 2 3 4 | 127.0.0.1 : 6379 > APPEND key1 " append" ( integer ) 12 127.0.0.1 : 6379 > get key1 "value1 append" |
数值递增
127.0.0.1:6379> set num 10 #设置初始值 OK 127.0.0.1:6379> INCR num (integer) 11 127.0.0.1:6379> get num "11"
1 2 3 4 5 6 | 127.0.0.1 : 6379 > set num 10 #设置初始值 OK 127.0.0.1 : 6379 > INCR num ( integer ) 11 127.0.0.1 : 6379 > get num "11" |
数值递减
127.0.0.1:6379> set num 10 OK 127.0.0.1:6379> DECR num (integer) 9 127.0.0.1:6379> get num "9"
1 2 3 4 5 6 | 127.0.0.1 : 6379 > set num 10 OK 127.0.0.1 : 6379 > DECR num ( integer ) 9 127.0.0.1 : 6379 > get num "9" |
返回字符串key长度
127.0.0.1:6379> SET name wang OK 127.0.0.1:6379> STRLEN name (integer) 4 127.0.0.1:6379> APPEND name " xiaochun" (integer) 13 127.0.0.1:6379> GET name "wang xiaochun" 127.0.0.1:6379> STRLEN name (integer) 13
1 2 3 4 5 6 7 8 9 10 | 127.0.0.1 : 6379 > SET name wang OK 127.0.0.1 : 6379 > STRLEN name ( integer ) 4 127.0.0.1 : 6379 > APPEND name " xiaochun" ( integer ) 13 127.0.0.1 : 6379 > GET name "wang xiaochun" 127.0.0.1 : 6379 > STRLEN name ( integer ) 13 |
判断key是否存在
127.0.0.1:6379> SET name wang ex 10 OK 127.0.0.1:6379> EXISTS NAME #大小写敏感 (integer) 0 127.0.0.1:6379> EXISTS name (integer) 1 127.0.0.1:6379> EXISTS name #过几秒再看 (integer) 0
1 2 3 4 5 6 7 8 | 127.0.0.1 : 6379 > SET name wang ex 10 OK 127.0.0.1 : 6379 > EXISTS NAME #大小写敏感 ( integer ) 0 127.0.0.1 : 6379 > EXISTS name ( integer ) 1 127.0.0.1 : 6379 > EXISTS name #过几秒再看 ( integer ) 0 |
查看key的过期时间
ttl #查看key的剩余生存时间 -1 #负一为永不过期,默认创建的key是永不过期,重新对key赋值,也会从有剩余生命周期变成永不过期 -2 #为没有此key num #key的剩余有效期 127.0.0.1:6379> TTL key1 (integer) -1 127.0.0.1:6379> SET name wang EX 100 OK 127.0.0.1:6379> TTL name (integer) 96 127.0.0.1:6379> TTL name (integer) 93 127.0.0.1:6379> SET name mage #重新设置,默认永不过期 OK 127.0.0.1:6379> TTL name (integer) -1 127.0.0.1:6379> SET name wang EX 200 OK 127.0.0.1:6379> TTL name (integer) 198 127.0.0.1:6379> GET name "wang"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | ttl #查看key的剩余生存时间 - 1 #负一为永不过期,默认创建的key是永不过期,重新对key赋值,也会从有剩余生命周期变成永不过期 - 2 #为没有此key num #key的剩余有效期 127.0.0.1 : 6379 > TTL key1 ( integer ) - 1 127.0.0.1 : 6379 > SET name wang EX 100 OK 127.0.0.1 : 6379 > TTL name ( integer ) 96 127.0.0.1 : 6379 > TTL name ( integer ) 93 127.0.0.1 : 6379 > SET name mage #重新设置,默认永不过期 OK 127.0.0.1 : 6379 > TTL name ( integer ) - 1 127.0.0.1 : 6379 > SET name wang EX 200 OK 127.0.0.1 : 6379 > TTL name ( integer ) 198 127.0.0.1 : 6379 > GET name "wang" |
重新设置key的过期时间
127.0.0.1:6379> TTL name (integer) 148 127.0.0.1:6379> EXPIRE name 1000 (integer) 1 127.0.0.1:6379> TTL name (integer) 999 127.0.0.1:6379>
1 2 3 4 5 6 7 | 127.0.0.1 : 6379 > TTL name ( integer ) 148 127.0.0.1 : 6379 > EXPIRE name 1000 ( integer ) 1 127.0.0.1 : 6379 > TTL name ( integer ) 999 127.0.0.1 : 6379 > |
取消key的过期时间
127.0.0.1:6379> TTL name (integer) 999 127.0.0.1:6379> PERSIST name (integer) 1 127.0.0.1:6379> TTL name (integer) -1
1 2 3 4 5 6 | 127.0.0.1 : 6379 > TTL name ( integer ) 999 127.0.0.1 : 6379 > PERSIST name ( integer ) 1 127.0.0.1 : 6379 > TTL name ( integer ) - 1 |
列表(list)
列表是一个双向可读写的管道,其头部是左侧,尾部是右侧,一个列表最多可以包含2^32-1(4294967295)个元素,下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,元素值可以重复,常用于存入日志等场景,此数据类型比较常用
生成列表并插入数据
#从左边添加数据,已添加的需向右移 127.0.0.1:6379> LPUSH list1 jack tom john #根据顺序逐个写入list1,最后的john会在列表的最左侧。 (integer) 3 127.0.0.1:6379> TYPE list1 list
1 2 3 4 5 | #从左边添加数据,已添加的需向右移 127.0.0.1 : 6379 > LPUSH list1 jack tom john #根据顺序逐个写入list1,最后的john会在列表的最左侧。 ( integer ) 3 127.0.0.1 : 6379 > TYPE list1 list |
向列表追加数据
127.0.0.1:6379> LPUSH list1 tom (integer) 2 #从右边添加数据,已添加的向左移 127.0.0.1:6379> RPUSH list1 jack (integer) 3
1 2 3 4 5 | 127.0.0.1 : 6379 > LPUSH list1 tom ( integer ) 2 #从右边添加数据,已添加的向左移 127.0.0.1 : 6379 > RPUSH list1 jack ( integer ) 3 |
获取列表长度
127.0.0.1:6379> LLEN list1 (integer) 3
1 2 | 127.0.0.1 : 6379 > LLEN list1 ( integer ) 3 |
获取列表指定位置数据
127.0.0.1:6379> LPUSH list1 a b c d (integer) 4 127.0.0.1:6379> LINDEX list1 0 #获取0编号的元素 "d" 127.0.0.1:6379> LINDEX list1 3 "a" 127.0.0.1:6379> #元素从0开始编号 127.0.0.1:6379> LPUSH list1 a b c d (integer) 4 127.0.0.1:6379> LRANGE list1 1 2 1) "c" 2) "b" 127.0.0.1:6379> LRANGE list1 0 3 #所有元素 1) "d" 2) "c" 3) "b" 4) "a" 127.0.0.1:6379> LRANGE list1 0 -1 #所有元素 1) "d" 2) "c" 3) "b" 4) "a" 127.0.0.1:6379> RPUSH list2 zhang wang li zhao (integer) 4 127.0.0.1:6379> LRANGE list2 1 2 #指定范围 1) "wang" 2) "li" 127.0.0.1:6379> LRANGE list2 2 2 #指定位置 1) "li" 127.0.0.1:6379> LRANGE list2 0 -1 #所有元素 1) "zhang" 2) "wang" 3) "li" 4) "zhao"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 127.0.0.1 : 6379 > LPUSH list1 a b c d ( integer ) 4 127.0.0.1 : 6379 > LINDEX list1 0 #获取0编号的元素 "d" 127.0.0.1 : 6379 > LINDEX list1 3 "a" 127.0.0.1 : 6379 > #元素从0开始编号 127.0.0.1 : 6379 > LPUSH list1 a b c d ( integer ) 4 127.0.0.1 : 6379 > LRANGE list1 1 2 1 ) "c" 2 ) "b" 127.0.0.1 : 6379 > LRANGE list1 0 3 #所有元素 1 ) "d" 2 ) "c" 3 ) "b" 4 ) "a" 127.0.0.1 : 6379 > LRANGE list1 0 - 1 #所有元素 1 ) "d" 2 ) "c" 3 ) "b" 4 ) "a" 127.0.0.1 : 6379 > RPUSH list2 zhang wang li zhao ( integer ) 4 127.0.0.1 : 6379 > LRANGE list2 1 2 #指定范围 1 ) "wang" 2 ) "li" 127.0.0.1 : 6379 > LRANGE list2 2 2 #指定位置 1 ) "li" 127.0.0.1 : 6379 > LRANGE list2 0 - 1 #所有元素 1 ) "zhang" 2 ) "wang" 3 ) "li" 4 ) "zhao" |
移除列表数据
127.0.0.1:6379> LPUSH list1 a b c d (integer) 4 127.0.0.1:6379> LRANGE list1 0 3 1) "d" 2) "c" 3) "b" 4) "a" 127.0.0.1:6379> LPOP list1 #弹出左边元素,即删除第一个 "d" 127.0.0.1:6379> LLEN list1 (integer) 3 127.0.0.1:6379> LRANGE list1 0 2 1) "c" 2) "b" 3) "a" 127.0.0.1:6379> RPOP list1 #弹出右边元素,即删除最后一个 "a" 127.0.0.1:6379> LLEN list1 (integer) 2 127.0.0.1:6379> LRANGE list1 0 1 1) "c" 2) "b" #LTRIM 对一个列表进行修剪(trim),让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除 127.0.0.1:6379> LLEN list1 (integer) 4 127.0.0.1:6379> LRANGE list1 0 3 1) "d" 2) "c" 3) "b" 4) "a" 127.0.0.1:6379> LTRIM list1 1 2 #只保留1,2号元素 OK 127.0.0.1:6379> LLEN list1 (integer) 2 127.0.0.1:6379> LRANGE list1 0 1 1) "c" 2) "b" #删除list 127.0.0.1:6379> DEL list1 (integer) 1 127.0.0.1:6379> EXISTS list1 (integer) 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 127.0.0.1 : 6379 > LPUSH list1 a b c d ( integer ) 4 127.0.0.1 : 6379 > LRANGE list1 0 3 1 ) "d" 2 ) "c" 3 ) "b" 4 ) "a" 127.0.0.1 : 6379 > LPOP list1 #弹出左边元素,即删除第一个 "d" 127.0.0.1 : 6379 > LLEN list1 ( integer ) 3 127.0.0.1 : 6379 > LRANGE list1 0 2 1 ) "c" 2 ) "b" 3 ) "a" 127.0.0.1 : 6379 > RPOP list1 #弹出右边元素,即删除最后一个 "a" 127.0.0.1 : 6379 > LLEN list1 ( integer ) 2 127.0.0.1 : 6379 > LRANGE list1 0 1 1 ) "c" 2 ) "b" #LTRIM 对一个列表进行修剪(trim),让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除 127.0.0.1 : 6379 > LLEN list1 ( integer ) 4 127.0.0.1 : 6379 > LRANGE list1 0 3 1 ) "d" 2 ) "c" 3 ) "b" 4 ) "a" 127.0.0.1 : 6379 > LTRIM list1 1 2 #只保留1,2号元素 OK 127.0.0.1 : 6379 > LLEN list1 ( integer ) 2 127.0.0.1 : 6379 > LRANGE list1 0 1 1 ) "c" 2 ) "b" #删除list 127.0.0.1 : 6379 > DEL list1 ( integer ) 1 127.0.0.1 : 6379 > EXISTS list1 ( integer ) 0 |
集合(set)
Set 是 String 类型的无序集合,集合中的成员是唯一的,这就意味着集合中不能出现重复的数据,可以在两个不同
的集合中对数据进行对比并取值,常用于取值判断,统计,交集等场景
生成集合key
127.0.0.1:6379> SADD set1 v1 (integer) 1 127.0.0.1:6379> SADD set2 v2 v4 (integer) 2 127.0.0.1:6379> TYPE set1 set 127.0.0.1:6379> TYPE set2 set
1 2 3 4 5 6 7 8 | 127.0.0.1 : 6379 > SADD set1 v1 ( integer ) 1 127.0.0.1 : 6379 > SADD set2 v2 v4 ( integer ) 2 127.0.0.1 : 6379 > TYPE set1 set 127.0.0.1 : 6379 > TYPE set2 set |
追加数值
#追加时,只能追加不存在的数据,不能追加已经存在的数值 127.0.0.1:6379> SADD set1 v2 v3 v4 (integer) 3 127.0.0.1:6379> SADD set1 v2 #没有追加成功 (integer) 0 127.0.0.1:6379> TYPE set1 set 127.0.0.1:6379> TYPE set2 set
1 2 3 4 5 6 7 8 9 | #追加时,只能追加不存在的数据,不能追加已经存在的数值 127.0.0.1 : 6379 > SADD set1 v2 v3 v4 ( integer ) 3 127.0.0.1 : 6379 > SADD set1 v2 #没有追加成功 ( integer ) 0 127.0.0.1 : 6379 > TYPE set1 set 127.0.0.1 : 6379 > TYPE set2 set |
查看集合的所有数据
127.0.0.1:6379> SMEMBERS set1 1) "v4" 2) "v1" 3) "v3" 4) "v2" 127.0.0.1:6379> SMEMBERS set2 1) "v4" 2) "v2"
1 2 3 4 5 6 7 8 | 127.0.0.1 : 6379 > SMEMBERS set1 1 ) "v4" 2 ) "v1" 3 ) "v3" 4 ) "v2" 127.0.0.1 : 6379 > SMEMBERS set2 1 ) "v4" 2 ) "v2" |
获取集合的交集
交集:已属于A且属于B的元素称为A与B的交(集)
127.0.0.1:6379> SINTER set1 set2 1) "v4" 2) "v2"
1 2 3 | 127.0.0.1 : 6379 > SINTER set1 set2 1 ) "v4" 2 ) "v2" |
获取集合的并集
并集:已属于A或属于B的元素为称为A与B的并(集)
127.0.0.1:6379> SUNION set1 set2 1) "v2" 2) "v4" 3) "v1" 4) "v3"
1 2 3 4 5 | 127.0.0.1 : 6379 > SUNION set1 set2 1 ) "v2" 2 ) "v4" 3 ) "v1" 4 ) "v3" |
获取集合的差集
差集:已属于A而不属于B的元素称为A与B的差(集)
127.0.0.1:6379> SDIFF set1 set2 1) "v1" 2) "v3"
1 2 3 | 127.0.0.1 : 6379 > SDIFF set1 set2 1 ) "v1" 2 ) "v3" |
有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个
double(双精度浮点型)类型的分数,redis正是通过该分数来为集合中的成员进行从小到大的排序,有序集合的成员是唯一的,但分数(score)却可以重复,集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1), 集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员),经常用于排行榜的场景
生成有序集合
127.0.0.1:6379> ZADD zset1 1 v1 #分数为1 (integer) 1 127.0.0.1:6379> ZADD zset1 2 v2 (integer) 1 127.0.0.1:6379> ZADD zset1 2 v3 #分数可重复,元素值不可以重复 (integer) 1 127.0.0.1:6379> ZADD zset1 3 v4 (integer) 1 127.0.0.1:6379> TYPE zset1 zset 127.0.0.1:6379> TYPE zset2 zset 一次生成多个数据: 192.168.7.101:6379> ZADD zset2 1 v1 2 v2 3 v3 4 v4 5 v5 (integer) 5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 127.0.0.1 : 6379 > ZADD zset1 1 v1 #分数为1 ( integer ) 1 127.0.0.1 : 6379 > ZADD zset1 2 v2 ( integer ) 1 127.0.0.1 : 6379 > ZADD zset1 2 v3 #分数可重复,元素值不可以重复 ( integer ) 1 127.0.0.1 : 6379 > ZADD zset1 3 v4 ( integer ) 1 127.0.0.1 : 6379 > TYPE zset1 zset 127.0.0.1 : 6379 > TYPE zset2 zset 一次生成多个数据: 192.168.7.101 : 6379 > ZADD zset2 1 v1 2 v2 3 v3 4 v4 5 v5 ( integer ) 5 |
集合排行案例
127.0.0.1:6379> ZADD paihangbang 90 nezha 199 zhanlang 60 zhuluoji 30 gangtiexia (integer) 4 127.0.0.1:6379> ZRANGE paihangbang 0 -1 #正序排序后显示集合内所有的key 1) "gangtiexia" 2) "zhuluoji" 3) "nezha" 4) "zhanlang" 127.0.0.1:6379> ZREVRANGE paihangbang 0 -1 #倒序排序后显示集合内所有的key 1) "zhanlang" 2) "nezha" 3) "zhuluoji" 4) "gangtiexia" 127.0.0.1:6379> ZRANGE paihangbang 0 -1 WITHSCORES #显示指定集合内所有key和得分情况 1) "gangtiexia" 2) "30" 3) "zhuluoji" 4) "60" 5) "nezha" 6) "90" 7) "zhanlang" 8) "199" 127.0.0.1:6379> ZREVRANGE paihangbang 0 -1 WITHSCORES #显示指定集合内所有key和得分情况 1) "zhanlang" 2) "199" 3) "nezha" 4) "90" 5) "zhuluoji" 6) "60" 7) "gangtiexia" 8) "30" 127.0.0.1:6379>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 127.0.0.1 : 6379 > ZADD paihangbang 90 nezha 199 zhanlang 60 zhuluoji 30 gangtiexia ( integer ) 4 127.0.0.1 : 6379 > ZRANGE paihangbang 0 - 1 #正序排序后显示集合内所有的key 1 ) "gangtiexia" 2 ) "zhuluoji" 3 ) "nezha" 4 ) "zhanlang" 127.0.0.1 : 6379 > ZREVRANGE paihangbang 0 - 1 #倒序排序后显示集合内所有的key 1 ) "zhanlang" 2 ) "nezha" 3 ) "zhuluoji" 4 ) "gangtiexia" 127.0.0.1 : 6379 > ZRANGE paihangbang 0 - 1 WITHSCORES #显示指定集合内所有key和得分情况 1 ) "gangtiexia" 2 ) "30" 3 ) "zhuluoji" 4 ) "60" 5 ) "nezha" 6 ) "90" 7 ) "zhanlang" 8 ) "199" 127.0.0.1 : 6379 > ZREVRANGE paihangbang 0 - 1 WITHSCORES #显示指定集合内所有key和得分情况 1 ) "zhanlang" 2 ) "199" 3 ) "nezha" 4 ) "90" 5 ) "zhuluoji" 6 ) "60" 7 ) "gangtiexia" 8 ) "30" 127.0.0.1 : 6379 > |
获取集合的长度数
127.0.0.1:6379> ZCARD paihangbang (integer) 4 127.0.0.1:6379> ZCARD zset1 (integer) 4 127.0.0.1:6379> ZCARD zset2 (integer) 4
1 2 3 4 5 6 | 127.0.0.1 : 6379 > ZCARD paihangbang ( integer ) 4 127.0.0.1 : 6379 > ZCARD zset1 ( integer ) 4 127.0.0.1 : 6379 > ZCARD zset2 ( integer ) 4 |
基于索引返回数值
127.0.0.1:6379> ZRANGE paihangbang 0 2 1) "gangtiexia" 2) "zhuluoji" 3) "nezha" 127.0.0.1:6379> ZRANGE paihangbang 0 10 #超出范围不报错 1) "gangtiexia" 2) "zhuluoji" 3) "nezha" 4) "zhanlang" 127.0.0.1:6379> ZRANGE zset1 1 3 1) "v2" 2) "v3" 3) "v4" 127.0.0.1:6379> ZRANGE zset1 0 2 1) "v1" 2) "v2" 3) "v3" 127.0.0.1:6379> ZRANGE zset1 2 2 1) "v3"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 127.0.0.1 : 6379 > ZRANGE paihangbang 0 2 1 ) "gangtiexia" 2 ) "zhuluoji" 3 ) "nezha" 127.0.0.1 : 6379 > ZRANGE paihangbang 0 10 #超出范围不报错 1 ) "gangtiexia" 2 ) "zhuluoji" 3 ) "nezha" 4 ) "zhanlang" 127.0.0.1 : 6379 > ZRANGE zset1 1 3 1 ) "v2" 2 ) "v3" 3 ) "v4" 127.0.0.1 : 6379 > ZRANGE zset1 0 2 1 ) "v1" 2 ) "v2" 3 ) "v3" 127.0.0.1 : 6379 > ZRANGE zset1 2 2 1 ) "v3" |
返回某个数值的索引
127.0.0.1:6379> ZRANK paihangbang nezha (integer) 2 127.0.0.1:6379> ZRANK zset1 v2 (integer) 1 127.0.0.1:6379> ZRANK zset1 v3 (integer) 2
1 2 3 4 5 6 | 127.0.0.1 : 6379 > ZRANK paihangbang nezha ( integer ) 2 127.0.0.1 : 6379 > ZRANK zset1 v2 ( integer ) 1 127.0.0.1 : 6379 > ZRANK zset1 v3 ( integer ) 2 |
哈希(hash)
hash 是一个string类型的field和value的映射表,edis 中每个 hash 可以存储 2^32 -1 键值对,类似于字典,存放了多个k/v 对,hash特别适合用于存储对象场景
生成hash key
127.0.0.1:6379> HSET 9527 name zhouxingxing age 20 (integer) 2 127.0.0.1:6379> TYPE 9527 hash 127.0.0.1:6379> HSET hash1 name tom age 18 (integer) 1 127.0.0.1:6379> TYPE hash1 hash
1 2 3 4 5 6 7 8 9 | 127.0.0.1 : 6379 > HSET 9527 name zhouxingxing age 20 ( integer ) 2 127.0.0.1 : 6379 > TYPE 9527 hash 127.0.0.1 : 6379 > HSET hash1 name tom age 18 ( integer ) 1 127.0.0.1 : 6379 > TYPE hash1 hash |
获取hash key字段值
127.0.0.1:6379> HGET 9527 name "zhouxingxing" 127.0.0.1:6379> HGET 9527 age "20" 127.0.0.1:6379> HMGET 9527 name age #获取多个值 1) "zhouxingxing" 2) "20" 127.0.0.1:6379>
1 2 3 4 5 6 7 8 9 | 127.0.0.1 : 6379 > HGET 9527 name "zhouxingxing" 127.0.0.1 : 6379 > HGET 9527 age "20" 127.0.0.1 : 6379 > HMGET 9527 name age #获取多个值 1 ) "zhouxingxing" 2 ) "20" 127.0.0.1 : 6379 > |
删除一个hash key的字段
127.0.0.1:6379> HDEL 9527 age (integer) 1 127.0.0.1:6379> HGET 9527 age (nil) 127.0.0.1:6379> HGET 9527 name "zhouxingxing"
1 2 3 4 5 6 | 127.0.0.1 : 6379 > HDEL 9527 age ( integer ) 1 127.0.0.1 : 6379 > HGET 9527 age ( nil ) 127.0.0.1 : 6379 > HGET 9527 name "zhouxingxing" |
获取所有hash表中的key
127.0.0.1:6379> HMSET 9527 name zhouxingxing age 50 city hongkong #重新设置 OK 127.0.0.1:6379> HKEYS 9527 1) "name" 2) "age" 3) "city"
1 2 3 4 5 6 | 127.0.0.1 : 6379 > HMSET 9527 name zhouxingxing age 50 city hongkong #重新设置 OK 127.0.0.1 : 6379 > HKEYS 9527 1 ) "name" 2 ) "age" 3 ) "city" |
获取指定hash的所有key及value
127.0.0.1:6379> HGETALL 9527 1) "name" 2) "zhouxingxing" 3) "age" 4) "50" 5) "city" 6) "hongkong" 127.0.0.1:6379>
1 2 3 4 5 6 7 8 | 127.0.0.1 : 6379 > HGETALL 9527 1 ) "name" 2 ) "zhouxingxing" 3 ) "age" 4 ) "50" 5 ) "city" 6 ) "hongkong" 127.0.0.1 : 6379 > |
删除hash
127.0.0.1:6379> DEL 9527 (integer) 1 127.0.0.1:6379> HMGET 9527 name city 1) (nil) 2) (nil) 127.0.0.1:6379> EXISTS 9527 (integer) 0
1 2 3 4 5 6 7 | 127.0.0.1 : 6379 > DEL 9527 ( integer ) 1 127.0.0.1 : 6379 > HMGET 9527 name city 1 ) ( nil ) 2 ) ( nil ) 127.0.0.1 : 6379 > EXISTS 9527 ( integer ) 0 |