Redis数据类型(Set,Sortedset)及Keys命令

Redis数据类型

1. Set

集合类型

集合类型:无序、不可重复

列表类型:有序、可重复

1.1 命令

1.1.1 增加/删除元素

语法:SADD key member [member ...]

127.0.0.1:6379> sadd set a b c
(integer) 3
127.0.0.1:6379> sadd set a
(integer) 0

语法:SREM key member [member ...]

127.0.0.1:6379> srem set c d
(integer) 1
1.1.2 获得集合中所有的元素

语法:SMEMBERS key

127.0.0.1:6379> smembers set
1) "b"
2) "a"
1.1.3 判断元素是否在集合中

语法:SISMEMBER key member

127.0.0.1:6379> sismember set a
(integer) 1
127.0.0.1:6379> sismember set h
(integer) 0

1.2 运算命令

1.2.1 集合的差集运算A-B

属于A并且不属于B的元素构成的集合。

语法:SDIFF key [key ...]

127.0.0.1:6379> sadd setA 1 2 3
(integer) 3
127.0.0.1:6379> sadd setB 2 3 4
(integer) 3
127.0.0.1:6379> sdiff setA setB 
1) "1"
127.0.0.1:6379> sdiff setB setA 
1) "4"
1.2.2 集合的交集运算 A ∩ B

属于A且属于B的元素构成的集合。

语法:SINTER key [key ...]

127.0.0.1:6379> sinter setA setB 
1) "2"
2) "3"
1.2.3 集合的并集运算 A ∪ B

属于A或者属于B的元素构成的集合

语法:SUNION key [key ...]

127.0.0.1:6379> sunion setA setB
1) "1"
2) "2"
3) "3"
4) "4"

1.3 其它命令

  1. 获得集合中元素的个数

    语法:SCARD key

    127.0.0.1:6379> smembers setA 
    1) "1"
    2) "2"
    3) "3"
    127.0.0.1:6379> scard setA 
    (integer) 3
    
  2. 从集合中弹出一个元素

    注意:由于集合是无序的,所有SPOP命令会从集合中随机选择一个元素弹出

    语法:SPOP key

    127.0.0.1:6379> spop setA 
    "1"
    

2. Sortedset

  • Sortedset又叫zset
  • Sortedset是有序集合,可排序的,但是唯一。
  • Sortedset和set的不同之处,是会给set中的元素添加一个分数,然后通过这个分数进行排序。

2.1 命令

2.1.1 增加元素

向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素个数,不包含之前已经存在的元素。

语法:ZADD key score member [score member ...]

127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu 
(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi 
(integer) 0
2.1.2 获取元素的分数

语法:ZSCORE key member

127.0.0.1:6379> zscore scoreboard lisi 
"97"
2.1.3 删除元素

移除有序集key中的一个或多个成员,不存在的成员将被忽略。

当key存在但不是有序集类型时,返回一个错误。

语法:ZREM key member [member ...]

127.0.0.1:6379> zrem scoreboard lisi
(integer) 1
2.1.4 获得排名在某个范围的元素列表

获得排名在某个范围的元素列表

  • 按照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

    语法:ZRANGE key start stop [WITHSCORES]

    127.0.0.1:6379> zrange scoreboard 0 2
    1) "zhangsan"
    2) "wangwu"
    3) "lisi"
    
  • 按照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

    语法:ZREVRANGE key start stop [WITHSCORES]

    127.0.0.1:6379> zrevrange scoreboard 0 2
    1) " lisi "
    2) "wangwu"
    3) " zhangsan "
    

如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数

127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES
1) "zhangsan"
2) "80"
3) "wangwu"
4) "94"
2.1.5 获取元素的排名
  • 从小到大

    语法:ZRANK key member

    127.0.0.1:6379> ZRANK scoreboard lisi 
    (integer) 0
    
  • 从大到小

    语法:ZREVRANK key member

    127.0.0.1:6379> ZREVRANK scoreboard zhangsan 
    (integer) 1
    
2.1.6 其它命令
  1. 获得指定分数范围的元素

    语法:ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

    127.0.0.1:6379> ZRANGEBYSCORE scoreboard 90 97 WITHSCORES
    1) "wangwu"
    2) "94"
    3) "lisi"
    4) "97"
    127.0.0.1:6379> ZRANGEBYSCORE scoreboard 70 100 limit 1 2
    1) "wangwu"
    2) "lisi"
    
  2. 增加某个元素的分数

    返回值是更改后的分数

    语法:ZINCRBY key increment member

    127.0.0.1:6379> ZINCRBY scoreboard 4 lisi 
    "101"
    
  3. 获得集合中元素的数量

    语法:ZCARD key

    127.0.0.1:6379> ZCARD scoreboard
    (integer) 3
    
  4. 获得指定分数范围内的元素个数

    语法:ZCOUNT key min max

    127.0.0.1:6379> ZCOUNT scoreboard 80 90
    (integer) 1
    
  5. 按照排名范围删除元素

    语法:ZREMRANGEBYRANK key start stop

    127.0.0.1:6379> ZREMRANGEBYRANK scoreboard 0 1
    (integer) 2 
    127.0.0.1:6379> ZRANGE scoreboard 0 -1
    1) "lisi"
    
  6. 按照分数范围删除元素

    语法:ZREMRANGEBYSCORE key min max

    127.0.0.1:6379> zadd scoreboard 84 zhangsan  
    (integer) 1
    127.0.0.1:6379> ZREMRANGEBYSCORE scoreboard 80 100
    (integer) 1
    

2.2 命令

2.2.1 商品销售排行榜

需求:根据商品销售量对商品进行排行显示

思路:定义商品销售排行榜(sorted set集合),Key为items:sellsort,分数为商品销售量。

写入商品销售量

  • 商品编号1001的销量是9,商品编号1002的销量是10

    192.168.101.3:7007> ZADD items:sellsort 9 1001 10 1002
    
  • 商品编号1001的销量加1

    192.168.101.3:7001> ZINCRBY items:sellsort 1 1001
    
  • 商品销量前10名:

    192.168.101.3:7001> ZRANGE items:sellsort 0 9 withscores
    

Keys命令

1. 常用命令

1.1 Keys

返回满足给定pattern 的所有key

redis 127.0.0.1:6379> keys mylist*
1) "mylist"
2) "mylist5"
3) "mylist6"
4) "mylist7"
5) "mylist8"

1.2 exists

确认一个key 是否存在

示例:从结果来看,数据库中不存在HongWan 这个key,但是age 这个key 是存在的

redis 127.0.0.1:6379> exists HongWan
(integer) 0
redis 127.0.0.1:6379> exists age
(integer) 1
redis 127.0.0.1:6379>

1.3 del

删除一个key

redis 127.0.0.1:6379> del age
(integer) 1
redis 127.0.0.1:6379> exists age
(integer) 0

1.4 rename

重命名key

示例:age 成功的被我们改名为age_new 了

redis 127.0.0.1:6379[1]> keys *
1) "age"
redis 127.0.0.1:6379[1]> rename age age_new
OK
redis 127.0.0.1:6379[1]> keys *
1) "age_new"
redis 127.0.0.1:6379[1]>

1.5 type

返回值的类型

示例:这个方法可以非常简单的判断出值的类型

redis 127.0.0.1:6379> type addr
string
redis 127.0.0.1:6379> type myzset2
zset
redis 127.0.0.1:6379> type mylist
list
redis 127.0.0.1:6379>

2. 设置key的生存时间

Redis在实际使用过程中更多的用作缓存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁。

EXPIRE key seconds           设置key的生存时间(单位:秒)key在多少秒后会自动删除
TTL key                     查看key生于的生存时间
PERSIST key             清除生存时间 
PEXPIRE key milliseconds    生存时间设置单位为:毫秒

例子:

192.168.101.3:7002> set test 1      设置test的值为1
OK
192.168.101.3:7002> get test            获取test的值
"1"
192.168.101.3:7002> EXPIRE test 5   设置test的生存时间为5秒
(integer) 1
192.168.101.3:7002> TTL test            查看test的生于生成时间还有1秒删除
(integer) 1
192.168.101.3:7002> TTL test
(integer) -2
192.168.101.3:7002> get test            获取test的值,已经删除
(nil)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容