侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

NoSQL数据库之Redis数据库管理(set类型和zset类型)

Redis  /  管理员 发布于 2年前   255

4.sets类型

        Set是集合,它是string类型的无序集合。set是通过hash table实现的,添加、删除和查找的复杂度都是O(1)。对集合我们可以取并集、交集、差集。通过这些操作我们可以实现sns中的好友推荐和blog的tag功能。

        sadd:向名称为key的set中添加元素。

redis 127.0.0.1:6379> sadd myset "hello"(integer) 1  //表示添加成功redis 127.0.0.1:6379> sadd myset "world"(integer) 1  //表示添加成功redis 127.0.0.1:6379> sadd myset "world"(integer) 0  //表示添加不成功redis 127.0.0.1:6379> smembers myset1) "world"2) "hello"

        srem:删除名称为key的set中的元素。

redis 127.0.0.1:6379> sadd myset2 one(integer) 1redis 127.0.0.1:6379> sadd myset2 two(integer) 1redis 127.0.0.1:6379> sadd myset2 three(integer) 1redis 127.0.0.1:6379> smembers myset21) "three"2) "two"3) "one"redis 127.0.0.1:6379> srem myset2 two(integer) 1redis 127.0.0.1:6379> srem myset2 two(integer) 0redis 127.0.0.1:6379> smembers myset21) "three"2) "one"

        spop:随机返回并删除名称为key的set中一个元素。

redis 127.0.0.1:6379> sadd myset3 one(integer) 1redis 127.0.0.1:6379> sadd myset3 two(integer) 1redis 127.0.0.1:6379> sadd myset3 three(integer) 1redis 127.0.0.1:6379> sadd myset3 four(integer) 1redis 127.0.0.1:6379> sadd myset3 five(integer) 1redis 127.0.0.1:6379> smembers myset31) "four"2) "three"3) "two"4) "one"5) "five"redis 127.0.0.1:6379> spop myset3"one"redis 127.0.0.1:6379> spop myset3"four"redis 127.0.0.1:6379> spop myset3"three"redis 127.0.0.1:6379> smembers myset31) "two"2) "five"

        sdiff:返回所有给定key与第一个key的差集。

redis 127.0.0.1:6379> smembers myset21) "three"2) "two"redis 127.0.0.1:6379> smembers myset31) "two"2) "one"redis 127.0.0.1:6379> sdiff myset2 myset31) "three"

        sdiffstore:返回所有给定key与第一个key的差集,并将结果存为另一个key。

redis 127.0.0.1:6379> smembers myset21) "three"2) "two"redis 127.0.0.1:6379> smembers myset31) "two"2) "one"redis 127.0.0.1:6379> sdiffstore myset4 myset2 myset3(integer) 1redis 127.0.0.1:6379> smembers myset41) "three"

        sinter:返回所有给定key的交集。

redis 127.0.0.1:6379> smembers myset21) "three"2) "two"redis 127.0.0.1:6379> smembers myset31) "two"2) "one"redis 127.0.0.1:6379> sinter myset2 myset31) "two"

        sinterstore:返回所有给定key的交集,并将结果存为另一个key。

redis 127.0.0.1:6379> smembers myset21) "three"2) "two"redis 127.0.0.1:6379> smembers myset31) "two"2) "one"redis 127.0.0.1:6379> sinterstore myset6 myset2 myset3(integer) 1redis 127.0.0.1:6379> smembers myset61) "two"

        sunion:返回所有给定key的并集。

redis 127.0.0.1:6379> smembers myset21) "three"2) "two"redis 127.0.0.1:6379> smembers myset31) "two"2) "one"redis 127.0.0.1:6379> sunion myset2 myset31) "three"2) "one"3) "two"

        sunionstore:返回所有给定key的并集。

redis 127.0.0.1:6379> smembers myset21) "three"2) "two"redis 127.0.0.1:6379> smembers myset31) "two"2) "one"redis 127.0.0.1:6379> sunionstore myset7 myset2 myset3(integer) 3redis 127.0.0.1:6379> smembers myset71) "three"2) "one"3) "two"

        smove:从第一个key对应的set中移除member并添加到第二个对应的set中。

redis 127.0.0.1:6379> smembers myset21) "three"2) "two"redis 127.0.0.1:6379> smembers myset31) "two"2) "one"redis 127.0.0.1:6379> smove myset2 myset7 three(integer) 1redis 127.0.0.1:6379> smembers myset21) "two"redis 127.0.0.1:6379> smembers myset31) "two"2) "one"3) "three"

        scard:返回名称为key的set的元素个数。

redis 127.0.0.1:6379> scard myset3(integer) 3

        sismember:测试member是否是名称为key的set的元素。

redis 127.0.0.1:6379> smembers myset21) "two"redis 127.0.0.1:6379> sismember myset2 two(integer) 1redis 127.0.0.1:6379> sismember myset2 one(integer) 0

        srandmember:随机返回名称为key的set的一个元素,但不删除元素。

redis 127.0.0.1:6379> smembers myset31) "two"2) "one"redis 127.0.0.1:6379> srandmember myset3"two"redis 127.0.0.1:6379> srandmember myset3"one"

 

5.sorted sets类型

        sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。

        zadd:向名称为key的zset中添加元素member,score用于排序。如果该元素存在,则更新其顺序。

redis 127.0.0.1:6379> zadd myzset 1 "one"(integer) 1redis 127.0.0.1:6379> zadd myzset 2 "two"(integer) 1redis 127.0.0.1:6379> zadd myzset 3 "two"(integer) 0redis 127.0.0.1:6379> zrange myzset 0 -1 withscores1) "one"2) "1"3) "two"4) "3"

        zrem:删除名称为key的zset中的元素member

redis 127.0.0.1:6379> zrange myzset 0 -1 withscores1) "one"2) "1"3) "two"4) "3"redis 127.0.0.1:6379> zrem myzset two(integer) 1redis 127.0.0.1:6379> zrange myzset 0 -1 withscores1) "one"2) "1"

        zincrby:如果在名称为key的zset中已经存在元素member,则该元素的score增加increment,否则向该集合中添加该元素,其score的值为increment。

redis 127.0.0.1:6379> zadd myzset2 1 "one"(integer) 1redis 127.0.0.1:6379> zadd myzset2 2 "two"(integer) 1redis 127.0.0.1:6379> zincrby myzset2 2 "one""3" //代表one的顺序号变成了3redis 127.0.0.1:6379> zrange myzset2 0 -1 withscores1) "two"2) "2"3) "one"4) "3"

        zrank:返回名称为key的zset中member元素的排名(按score从小到大排序)即下标。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores1) "one"2) "1"3) "two"4) "2"5) "three"6) "3"7) "five"8) "5"redis 127.0.0.1:6379> zrank myzset3 two(integer) 1 //two的下标是1(从0开始)

        zrevrank:返回名称为key的zset中member元素的排名(按score从大到小排序)即下标。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores1) "one"2) "1"3) "two"4) "2"5) "three"6) "3"7) "five"8) "5"redis 127.0.0.1:6379> zrevrank myzset3 two(integer) 2

        zrevrange:返回名称为key的zset(按score从大到小顺序)中的index从start到end的所有元素。

redis 127.0.0.1:6379> zrevrange myzset3 0 -1 withscores1) "five"2) "5"3) "three"4) "3"5) "two"6) "2"7) "one"8) "1"redis 127.0.0.1:6379> 

        zrangebyscore:返回集合中score在给定区间的元素。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores1) "one"2) "1"3) "two"4) "2"5) "three"6) "3"redis 127.0.0.1:6379> zrangebyscore myzset3 2 3 withscores1) "two"2) "2"3) "three"4) "3"

        zcount:返回集合中score在给定区间的数量。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores1) "one"2) "1"3) "two"4) "2"5) "three"6) "3"7) "five"8) "5"redis 127.0.0.1:6379> zcount myzset3 2 3(integer) 2

        zcard:返回集合中的元素个数。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores1) "one"2) "1"3) "two"4) "2"5) "three"6) "3"7) "five"8) "5"redis 127.0.0.1:6379> zcard myzset3(integer) 4

        zremrangebyrank:删除集合中排名在给定区间的元素。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores1) "one"2) "1"3) "two"4) "2"redis 127.0.0.1:6379> zremrangebyrank myzset3 1 1(integer) 1 //只删除一个redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores1) "one"2) "1"

        zremrangebyscore:删除集合中score在给定区间的元素。

redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores1) "one"2) "1"3) "two"4) "2"5) "three"6) "3"redis 127.0.0.1:6379> zremrangebyscore myzset3 1 2(integer) 2 //删除顺序为1和2的redis 127.0.0.1:6379> zrange myzset3 0 -1 withscores1) "three"2) "3"

 

说明:本文是我网上学习LAMP兄弟连李捷老师《NoSQL数据库之Redis数据库管理》的学习笔记。


  • 上一条:
    NoSQL数据库之Redis数据库管理(list类型)
    下一条:
    NoSQL数据库之Redis数据库管理(Redis的常用命令及高级应用)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • redis安全配置之修改端口、添加密码流程步骤及启动使用(0个评论)
    • redis实现分页(0个评论)
    • Redis应用场景限流算法之一,计数器算法代码(0个评论)
    • 全网不一定最好的一篇Redis面试题解答详解,有补充希望您在底部留言(0个评论)
    • Redis为什么这么快(1个评论)
    • 近期文章
    • 在laravel框架中使用中间件 + 队列的方式记录请求日志(0个评论)
    • laravel框架常用速查表收集(0个评论)
    • go语言中查找最长不含有重复字符的字符串算法示例代码(0个评论)
    • laravel中where IN多列特殊查询类型代码示例(0个评论)
    • 使用Laravel Airdrop加速您的CI构建(0个评论)
    • go语言中日期时间戳比较功能示例代码(0个评论)
    • 来自一位国外前端程序员学习go语言的功能第三部分(0个评论)
    • Laravel9 Eloquent WHERE Like搜索查询示例代码(0个评论)
    • 在PHP中使用MQTT协议的流程步骤(0个评论)
    • PHP远程代码执行漏洞:mysqlnd拓展中存在堆缓冲区溢出漏洞修复方式建议(0个评论)
    • 近期评论
    • 博主 在

      centos7中Meili Search搜索引擎安装流程步骤中评论 @鹿   执行以下命令看看你的2.27版本是否存在strin..
    • 鹿 在

      centos7中Meili Search搜索引擎安装流程步骤中评论 这是我的错误提示,下载了对应的glibc-2.25.tar.gz后续按照教程操作..
    • 阿凡达123 在

      golang 怎么做热更新中评论 也可以看看这个:https://github.com/edwingeng/hot..
    • 博主 在

      hyperf框架常用命令-在centos7中退出命令及在docker容器中退出命令中评论 @路过的靓仔:cdn静态资源被墙,已修复..
    • GGGGGGGGG 在

      layui框架常用输入框介绍中评论 写的很好解决问题..
    • 2017-12
    • 2020-03
    • 2020-05
    • 2021-04
    • 2022-03
    • 2022-05
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客