首页 > 其他 > 详细

Redis入门&基础操作&企业级解决方案

时间:2021-04-14 15:15:47      阅读:17      评论:0      收藏:0      [点我收藏+]

Redis

NoSQL 入门和概述

问题现象

  • 海量用户的访问
  • 高并发,短时间被大量用户访问

根本原因(关系型数据库)

  • 数据存储到磁盘上的,IO 性能底下
  • 关系型数据库关系复杂,网状结构,牵一发而动全身,扩展性差,不便于大规模集群

解决思路

  • 降低磁盘 IO 次数,越低越好,使用内存来存储
  • 去除数据简关系,关系越简单越好,不存储关系,只存储数据

什么是 NoSQL

  • 即 Not-Only SQL(泛指非关系的数据库),意为,不能仅仅只用 SQL,因该使用其他的方法,这种其他的东西,就泛指为 NoSQL ,而不是指具体的 SQL 语言,作为关系型数据库的补充(实际上,数据还是存储在硬盘上的,不能将数据全部存储在内存中去)

作用

  • 应对基于海量用户海量数据前提下的数据处理问题

特征

  • 可扩容,可伸缩
  • 大数据量下的高性能
  • 灵活的数据模型
  • 高可用

常见的 NoSQL 数据库

  • Redis
  • memcache
  • Hbase
  • MongoDB

常见的解决方案

技术分享图片

Redis 简介

  • Redis 简介

    • Redis (Remote Dictionary Server,远程字典服务) 是用 C 语言开发的一个开源高性能键值对(Key:Value)的数据库
    • 特点
      • 数据间没有必然的关联关系
      • 内部采用单线程机制进行工作,也就是单任务的,处理完一个任务再处理下一个任务而不是同时处理多个任务
      • 高性能,50 个并发执行 100000 个请求,IO 速度分别为 110000次/s 和 81000次/s
      • 多数据类型支持
      • 持久化支持,可以进行数据的灾难恢复,例如突然断电
    • 应用
      • 为热点数据加速查询,例如热点新闻,热点商品等在某一时段可能成为热点事物并被同时大量访问的东西
      • 任务队列,如秒杀,抢购,查询等
      • 即时信息的查看,例如聊天记录,排行榜等
      • 时效性信息的控制,例如短信验证码的有效期
      • 消息队列
      • 分布式锁

Redis 下载安装 & 启动

  • Linux 版本(适用于企业级开发)
    • Redis 高级开始使用
  • Windows 版本(适用于初学者)
    • Redis 入门使用
  • 解压 redis 压缩包
  • 进入解压目录,双击运行 redis-server.exe
    • 技术分享图片
    • 其中,port 代表 redis 启动的端口号,pid 代表一个 redis 服务对象的 id ,用于区分多个不同的 redis 服务
  • 再次双击运行 redis-cli.exe 进入 redis 客户端

Redis 基础操作

基本操作命令

  • 设置 key value 数据

    • 命令: set key value
      示例: set name zhangsan
      
  • 数据查询

    • 命令: get key
      示例: get name
      
    • 若对应的数据不存在,返回空( nil )

  • 清屏

    • 命令: clear
      
  • 帮助命令

    • 命令: help 指令
      示例: help set
      
  • 退出命令

    • exit
      quit
      

数据存储类型

作为缓存使用

  • 原始业务功能设计
    • 秒杀
    • 618 活动
    • 双 11 活动
    • 12306 网上购票
  • 突发的高频访问数据
    • 突发的时政要闻等,微博热搜
  • 高频,复杂的统计数据
    • 在线直播数据,在线人数
    • 投票数据

附加功能

  • 系统功能优化升级
    • 单服务器升级集群
    • Session 管理
    • Token 管理

Redis 数据类型

  • 基于上述缓存和附加功能,总结出 Redis 的物种常用数据类型
    • string 字符串类型,类比于 Java 中的 String
    • list 列表类型,类比于 Java 中的 LinkedList
    • hash 散列类型,类比于 Java 中的 HashMap
    • set 集合类型,类比于 Java 中的 HashSet
    • sorted_set 有序集合类型,类比于 Java 中的 TreeSet

Redis 数据存储格式

  • redis 自身是一个 Map,其中所有的数据都是采用 key:value 的形式存储的
  • redis 的数据类型指的是 value 的数据类型,key 的数据类型永远都是 value

string 类型

简介

  • 存储的是单个数据,最简单的数据存储类型,也是最常用的数据存储类型
  • 一个数据存储空间保存一个数据
  • 通常使用字符串,如果字符串以整数形式表示,则可以作为数字操作使用,但其类型任然是字符串

基本操作

  • 添加/修改数据

    • 命令: set key value
      示例: set name zhangsan //添加数据
            set name lisi //对同一个 key 再次赋值,就为修改数据
      
  • 获取数据

    • 命令: get key
      示例: get name
      
  • 删除数据

    • 命令: del key
      示例: del name
      
  • 补充

    • redis 中,操作的成功与失败,分别用 (integer)0,(integer)1 表示
  • 添加修改多个数据(多个数据中原始存在的的则会覆盖)

    • 命令: mset key1 value1 key2 value2 ...
      示例: mset name zhangsan age 18 ...
      
  • 获取多个数据(不存在的数据会给出 nil 值)

    • 命令: mget key1 key2 ...
      示例: mget name age ...
      
  • 追加信息到原始信息后部(若原始信息存在则追加,否则新建数据)

    • 命令: append key value
      示例: append age +
      例如:原先 age 的数据为 18,append 后为: 18+
      
    • 返回值为追加后,字符串的长度

  • 获取字符串长度

    • 命令: strlen key
      示例: strlen name
      

单数据操作 & 多数据操作如何选择

  • 单数据操作

    • get
    • set
  • 多数据操作

    • mget
    • mset
  • 如何选择

    • 根据具体情况而定,面对一次性非常大数据量的指令,例如单次进行一亿次的 set 操作,不管是单数据操作还是多数据操作,都会消耗大量时间,此时,可以考虑对数据进行一个切分操作,将一亿条数据切分成一百万一份,然后使用多数据操作进行多次执行

string 扩展操作 1

  • 业务场景

    • 对于大量数据,分表是基本操作,使用多张表存储同类型的数据,但是对应的主键 id 必须保证统一性,不能重复,Oracle 数据库具有 sequence 设定,MySQL 并不具备类似的机制,该如何解决?
  • 解决方案

    • 将主键 id 交由 redis 来控制
    • redis 用于控制数据库表主键,为数据库表主键提供生成策略,保证数据库表主键的唯一性
    • 此方案适用于所有数据库,且支持数据库集群
  • 具体操作

    • 设置数值数据增加指定范围的值

      • 命令: incr key // 对字符串数值形式的数据进行 + 1 的操作
        示例: incr num // num 对应的 value 值 + 1
        
        命令: incrby key 增加值 // 对字符串数值形式的数据进行加上指定数值的操作
        示例: incrby num 10 // num 对应的 value 值 + 10
        
        命令: incrbyfloat key 增加值 // 对字符串数值新式的数据进行加上指定浮点数的操作
        示例: incrbyfloat num 1.5 // num 对应的 value 值 + 1.5    
        
    • 设置数值数据减少指定范围的值

      • 命令: decr key // 对字符串数值形式的数据进行 - 1 的操作
        命令: decrby key 减少值 // 对字符串数值形式的数据进行减去指定数值的操作
        
    • 补充

      • incrby ,incrbyfloat,dscrby 都能够使用负数来实现增减数值的效果
      • 当数值为浮点数时,就不能直接使用 incrby 进行整数或浮点数的增减,需要使用 incrbyfloat
      • string 在 redis 内部默认就是一个字符串,当遇到增减类操作时,就会转换为数值进行计算
      • redis 的所有操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行,无需考虑并发带来的数据影响
      • 注意
        • 按数值进行操作的数据,如果原始数据不能转换为数值,或超过 redis 数值范围上限( 9223372036854775807,Java long 数据类型的最大值: Long.MAX_VALUE),将报错

string 扩展操作 2

  • 业务场景

    • 海选投票中,每个账号每四个小时只能投 1 票,商品的促销期,只能维持三天,如何字段控制这种时效性?
  • 解决方案

    • 设置一个数据具有指定的生命周期
  • 具体操作

    • 命令: setex key 秒数 value // 设置 key 对应的 value 数据生命周期为多少秒
      示例: setex num 5 value // 设置 num 对应的 value 数据生命周期为 5 秒
          
      命令: psetex key 毫秒数 value // 设置 key 对应的 value 数据生命周期为多少毫秒
      示例: psetex num 5 value // 设置 num 对应的 value 数据生命周期为 5 毫秒    
      
  • 补充

    • 当设置了数据的时效性,且在时效范围内时,对数据进行了 set 操作,则之前设置的时效性作废

string 数据类型操作注意事项

  • 数据操作不成功与数据正常操作之间的差异
    • 表示运行结果是否成功
      • (integer) 0 失败
      • (integer) 1 成功
    • 表示运行结果值
      • (integer) 3 3个
      • (integer) 1 1个
    • 数据未获取到
      • (nil) 等同于 null
    • 数据存储最大量
      • 512 MB
    • 数值计算最大范围
      • -9223372036854775807 ~ 9223372036854775807

string 类型应用场景

  • 业务场景

    • 微博上大 V 的关注数,粉丝数等,这就是一个热点信息,每一个查看该主页的人,都会看到该信息
  • 解决方案

    • 以用户主键和属性作为 key ,后台设定定时刷新策略即可
    • 例如
      • user?-id-?13132323423:fans ---> 1212133 代表的是 user 表中 id 为 13132323423 用户的 fans 数量
      • user-id-122132323 ---> {id:122132323,name:张三,fans:323233} 代表的是 user 表中 id 为 122132323 用户的 fans 信息,以 json 格式进行存储
  • 数据库中热点数据 key 的命名规范

    • 表名 主键名 主键值 字段名
      user : id : 1001 : name

      表名 主键名 主键值 字段名
      order : id : 1143 : order_name

hash 类型

hash 简介

  • 技术分享图片
    • 通过 field 和 value 存储多条数据作为一个存储空间,将这整个存储空间作为 key 的 value,这个 value 的数据类型就叫 hash
    • 一个存储空间保存多个键值对数据
  • hash 存储结构优化
    • 当 hash 中存储的 field 较少时,存储结构优化为类数组的结构
    • 如果 hash 中存储的 field 较多时,存储结构使用 HashMap 结构

hash 基本操作

  • 添加/修改数据

    • 命令: hset key field value
      示例: hset user name zhangsan
      
  • 获取数据

    • 命令: hget key field
      示例: hget user name
      
      命令: hgetall key // 获取 key 对应的所有 field 数据
      示例: hgetall user
      
  • 删除数据(也删除多个 field 的数据)

    • 命令: hdel key field1 [field2]
      示例: hdel user name age
      
  • 添加/修改多个数据

    • 命令: hmset key field1 value1 field2 value2 ...
      
  • 获取多个数据

    • 命令: hmget key field1 field2 ...
      
  • 获取 hash 表中 key 对应字段( field )的数量

    • 命令: hlen key
      
  • 获取 hash 表中是否存在指定字段

    • 命令: hexists key field
      

hash 类型数据扩展操

  • 获取 hash 表中 key 对应的所有字段名或字段值

    • 命令: hkeys key // 获取指定 key 对应的所有 field 的值
      命令: hvals key  // 获取指定 key 对应的所有 filed 的 value 值
      
  • 设置指定字段的数值数据增加指定范围的值

    • 命令: hincrby key field 增加值 // 执行指定 key 的数值类型的 field 属性加上指定值的操作 
      命令: hincrbyfloat key field 增加值 // 执行指定 key 的数值类型的 field 属性加上指定浮点值的操作 
      
    • 补充

      • 当操作的数值类型 filed 为浮点数据时,便不能使用 hincrby 进行操作了
      • 注意
        • hash 数据类型中的 value 只能存储字符串,不允许存储其他数据类型,不允许存在嵌套现象,如果数据未获取到,对应的值为 (nil)
        • 每个 hash 存储的键值对为 2^32 - 1 个
        • hash 的类型十分贴近对象的数据存储形式,并且可以灵活的删除对象属性,但是,hash 设计的初衷并不是为了存储大量对象而设计的,切记不可滥用,更不可将 hash 作为对象列表使用
        • hgetall 操作可以获取全部的 field,如果内部 field 过多,遍历整体数据的效率过低,可能成为数据访问的瓶颈,推荐需要那个 field 就获取那个 field

hash 类型应用场景 1

  • 业务场景

    • 电商网站购物车设计与实现
  • 数据模型

    • 技术分享图片
  • 业务分析

    • 使用用户的 id 作为 key
    • 使用 商品 id 作为 field (购物车中的多个不同商品,对应的就是 hash 中的多个 field)
    • 每个商品的数量使用 field 的 value 来表示,可以对商品数量进行修改
    • 全选商品时,使用 hgetall 来获取所有的商品 id
    • 计算购物车中总量时,使用 hlen
    • 计算商品总数时,使用 hvals 将返回的值进行累加
    • 删除商品时,使用 hdel
    • 某一个商品增加数量,使用 hincrby
  • 缺点

    • 当前的设计只是将数据存储到了 redis 中,并没有起到加速的作用,具体到用户查看购物车时,还需要根据 redis 中存储的信息到数据库中进行二次查询
  • 解决方案

    • 每条购物车中的商品记录保存两条 field

      • field1 专用于保存购买数量
        • 命名格式: 商品id:nums
        • 保存数据: 商品数量
      • field2 专用于保存购物车中显示的信息,例如文字描述,图片路径,商家信息等
        • 命名格式: 商品id:info
        • 保存数据: json 格式的商品信息
    • 优化

      • 此时,保存的商品信息,对于同一个商品,实际上是一样的,差距只是在于购买的商品数量不同,因此,可以将商品信息抽取出来,将商品的 id 作为 field,商品信息的 json 字符串作为 value,成为一个键值对,也就是一个商品 hash,这样,就可以将多个不同的商品 hash 独立出来,作为一个公共的 hsah 区域(也可以根据商品种类,分为多个公共 hash 区域),每个用户的购物车中,保存的就只是商品购买数量,至于商品的信息,全部都去公共的商品 hash 中通过商品 id 进行查询

      • 不可能一开始就将所有的商品全部加入到商品公共 hash 中去,因为每时每刻都可能会出现新的商品上架,可以采取用户购买了一种商品,就将该商品加入到商品公共 hash 中去,同时为了避免重复的商品信息,使用

        命令: hsetnx key field value // 判断当前 key 对应的 field 是否有值,若有,则不进行添加操作
        

        来添加商品信息,该命令会先判断当前 key 对应的 field 是否有值,若有,则不进行添加操作,若该商品的信息发生变化,则依然通过 hset 来修改其信息

hash 类型应用场景 2

  • 业务场景
    • 双 11 活动,某种商品限时限量购买,需要进行抢购
  • 解决方案
    • 技术分享图片
    • 商家 id 作为 key,商品 id 作为 field,参与抢购的数量作为 value
    • 在抢购时,每当用户抢购一个商品,商品的数量就进行降值操作,使用 hincrby 通过负数值来实现
  • 补充
    • 原则上,redis 只做数据存储,不涉及业务逻辑,涉及到业务逻辑的地方,应该视实际情况慎重考虑
    • string 存储数据 与 hash 存储数据
      • 通过 string 存储的数据,更加考虑数据的整体性,注重对数据的读操作
      • hash 存储的数据,具有一种群组特性,将一系列数据包装起来,对外使用一个单独的 key 进行读取,注重的是对数据的更新
      • 实际使用过程中,根据二者的特性,灵活选取

list 类型

简介

  • 数据存储需求: 存储多个数据,并对数据进入存储空间的顺序进行区分
  • 需要的存储结构: 一个存储空间保存多个数据,且通过数据可以体现进入的顺序
  • list 类型: 保存多个数据,底层使用双向链表的存储结构进行实现

list 类型基本操作

  • 添加/修改数据

    • 命令: lpush key value1 [value2] ... // 从左边开始添加多个数据到 list 中
      命令: rpush key value1 [value2] ... // 从右边开始添加多个数据到 list 中
      
  • 获取数据(获取数据统一从左边进行获取)

    • // 获取列表中指定索引范围的数据(索引从 0 开始,若添加数据时,使用的是 lpush 则查出的数据顺序与添加时的顺  序相反,反之亦然(类似于 Stack 结构);倒数第一个索引为 -1,可以直接通过 lrange 0 -1 查询出所有数据)
      命令: lrange key start stop
      
      // 获取列表中指定所有的数据(索引从 0 开始)
      命令: lindex key index
      
      // 获取指定列表的长度
      命令: llen key
      
  • 获取并移除数据(可以从右边也可以从左边获取)

    • // 从左边出元素
      命令: lpop key
          
      // 从右边出元素
      命令: rpop key
      
  • 补充

    • 关于 list 中添加元素,出元素等操作,可以结合 Stack 的数据结构进行理解

list 扩展操作 1

  • 规定时间内,从多个 list 中获取并移除数据

    • 命令: blpop key1 [key2] ... timeout // 从左边开始移除
      命令: brpop key1 [key2] ... timeout // 从右边开始移除
      
    • 解析

      • 此操作是阻塞形式的,当设置了阻塞时间,当前执行此命令的线程就会进入等待状态,若 list 中本来就有数据,则会立即取出来,否则,在设置的等待时间内,若对 list 进行了 lpush 或 rpush 操作,使得 list 中有数据,则之前等待执行 blpop 或 brpop 的线程会立即获取到该数据

list 扩展操作 2

  • 业务场景

    • 微信朋友圈的点赞,要求按照点赞的顺序显示点赞的好友信息
  • 解决方案

    • 技术分享图片

    • 每一条朋友圈都是唯一的,可以作为一个 key,而朋友圈的点赞列表就作为一个 list

    • 当有人点赞时,执行 lpush 或 rpush 操作将点赞人的信息放入 list 中并显示出来

    • 当有人取消点赞时,使用

      // 移除指定的数据,意为: 删除指定 key 对应的 list 中的 count 个 value 数据,也就是说,list 中有 3 个 a ,可以使用 lrem list 1 a 只删除一个 a ,也可以使用 lrem list 3 a 将 3 个 a 都删除
      命令: lrem key count value
      
  • 补充

    • redis 适合用于具有先后顺序的数据控制

list 数据操作注意事项

  • list 中保存的数据都是 string 类型的,数据的总容量是有限的,最多 2^32 - 1 个元素(4294967295)
  • list 具有索引的概念,可以按照索引操作,但是实际操作时,通常以队列或栈的形式进行数据的出入操作
  • 获取全部数据操作结束索引为 -1,以此类推
  • list 可以对数据进行分页操作,通常第一页的信息来源于 list (速度快),第二页及之后的信息来源于数据库

list 类型应用场景 1

  • 业务场景
    • 新浪,腾讯,微博中,个人用户的关注列表,粉丝列表等,粉丝列表将最近的关注进行展示等
    • 多台日志服务器的日志搜集
  • 解决方案
    • 依赖 list 的数据具有顺序的特性进行管理
    • 使用队列的模型解决多路信息汇总的问题
    • 使用栈模型解决最新消息的问题
  • 补充
    • redis 应用于最新消息的展示

set 类型

简介

  • 存储大量的数据,在查询方面提供高效率
  • 需要的存储结构
    • 保存大量的数据,搞笑的内部存储机制,便于查询
  • set 类型,与 hash 存储结构完全相同,仅仅存储键,不存储值(nil),键不允许重复
    • 技术分享图片

set 类型数据的基本操作

  • 添加数据

    • 命令: sadd key value1 value2
      
  • 获取全部数据

    • 命令: smembers key
      
  • 删除数据

    • 命令: srem key value1 value2
      
  • 获取集合数据总量

    • 命令: scard key
      
  • 判断集合中是否包含指定的数据

    • sismember key value
      

set 数据类型扩展操作 1

  • 业务场景

    • 每位用户在首次使用今日头条时,会设置 3 项爱好内容,但是后期为了增加用户的活跃度,兴趣点,必须让用户对其他类别的信息产生兴趣,如何实现?
  • 业务分析

    • 系统分析出各个分类的最新或最热点信息条目组织成 set 集合
    • 随机挑选出其中的部分信息
    • 配合用户关注信息分类中的热点信息组织成展示的信息集合
  • 解决方案

    • 随机获取集合中指定数量的数据

      • 命令: srandmember key [count]
        
    • 随机获取集合中的某个数据并将数据移出集合

      • 命令: spop key
        
    • 补充

      • redis 能够应用于随机推荐类信息的检索,例如歌单推荐,热点新闻推荐等等

set 数据类型扩展操作 2

  • 业务场景

    • 社交软件中,扩大用户的交际圈
    • 用户微信公众号的关注度
    • 美团给用户推荐美食
  • 解决方案

    • 求两个集合的交,并,差集

      • 命令: sinter key1 [key2] // 交集
        命令: sunion key1 [key2] // 并集
        
        // 差集(redis 中的差集是有方向性的,以在左边的 key 对应的集合为准,以右边的集合比较,相当于从左边的集合中元素去除与右边相比较,相同的元素,剩下的就叫差集)    
        命令: sdiff key1 [key2] 
        
    • 将两个集合的交,并,差集存储到指定集合中

      • 命令: sinterstore 指定集合 key1 [key2] 
        命令: sunionstore 指定集合 key1 [key2] 
        命令: sdiffstore 指定集合 key1 [key2]
        
    • 将指定数据从原始数据移动到指定目标集合中

      • 命令: smove source 指定集合 指定元素
        
    • 补充

      • redis 可以用于同类信息的关联检索,二度关联检索,深度关联检索
      • 显示共同关注
      • 显示共同好友
      • 由用户 A 出发,获取到好友用户 B 的好友信息列表
      • 由用户 A 出发,获取到好友用户 B 的购物清单

set 操作注意事项

  • set 操作数据不允许重复,如果添加的数据在 set 中已经存在,将只保留一份
  • set 虽然和 hash 的结构很相似,但是无法启用 hash 中存储值的那部分空间

set 类型应用场景 1

  • 业务场景
    • 某公司有 12000 名员工,每位员工具有一个或多个角色,如何快速进行权限校验
  • 解决方案
    • 依赖 set 集合数据不重复的特征,依赖 set 集合 hash 存储结构特征,完成数据过滤与快速查询
      • 根据不同角色的不同权限构造 set 集合
      • 根据用户的角色,将对应权限的 set 集合,合并到某个用户对应的权限 set 集合中去
      • 当用户执行权限时,根据用户的权限 set 集合,查询是否具有该权限
  • 补充
    • redis 可以应用于同类数据的不重复数据的合并操作

set 应用场景 2

  • 业务场景
    • 统计网站的访问量(PV),独立访问(UV),独立IP(IP)
      • PV: 网站被访问次数,可通过刷新页面提供访问量统计访问量
      • UV: 网站被不同用户访问的次数,可提供 cookie 统计访问量,相同用户切换 ip 地址,UV 不变
      • IP: 网站被不同 IP 地址访问的总次数,可通过 IP 地址,相同 IP 不同用户访问 IP 不变
  • 解决方案
    • 使用 string 类型,通过 incr 统计日访问量
    • 使用 set 模型,记录不同的 cookie ,通过 scard 统计 cookie 数量
    • 使用 set 模型,记录不同的 ip 的数量,通过 scard 统计 ip 数量

set 类型应用场景 3

  • 业务场景
    • 某些网站的信息具有一定价值,为了不被不法分子窃取,例如爬虫等,需要设置黑名单和白名单来验证访问者的身份
  • 解决方案
    • 将用户的黑名单放入 set 集合中,当用户到访问达时,将其与黑名单 set 中的数据进行对比
    • 还可以如果黑名单 set 过滤 ip ,设备信息等

sorted_set 类型

简介

  • 新需求
    • 数据的排序有利于数据的展示,需要提供一种根据自身特征进行排序的方式
  • 新的存储模型,可以保存可排序的数据
  • sorted_set 类型
    • 在 set 的存储结构上添加可排序的字段 score
  • 图示
    • 技术分享图片

sorted_set 基本操作

  • 添加数据

    • 命令: zadd key score1 member1 [score2 member2]
      
  • 获取全部数据

    • // 升序获取 start 到 stop 索引之间的值(闭区间),加上 WITHSCORES 参数后,会显示 score 字段
      命令: zrange key start stop [WITHSCORES]
      // 降序获取 start 到 stop 索引之间的值,加上 WITHSCORES 参数后,会显示 score 字段    
      命令: zrevrange key start stop [WITHSCORES]
      
  • 删除数据

    • 命令: zrem key member [member ...]
      
  • 按条件获取数据

    • // 查询指定范围 min ~ max 内的数据(闭区间),升序,limit 限定查询结果,用法与 MySQL 相同
      命令: zrangebyscore key min max [WITHSCORES] [LIMIT]
      // 查询指定范围 min ~ max 内的数据(闭区间),降序,limit 
      命令: zrevrangebyscore key max min [WITHSCORES]
      
  • 按条件删除数据

    • // 删除 start 到 stop 索引之间的值(闭区间)
      命令: zremrangebyrank key start stop
      命令: zremrangebyscore key min max
      
  • 注意

    • min与max用于限定搜索查询的条件
    • start与stop用于限定查询范围,作用于索引,表示开始和结束索引
    • offset与count用于限定查询范围,作用于查询结果,表示开始位置和数据总量
  • 获取集合数据总量

    • // 获取数据总数
      命令: zcard key
      
          // 获取指定范围 min ~ max(闭区间) 的数据总数
      命令: zcount key min max
      
  • 集合交并操作

    • // 多个集合的 交 操作,执行 交 操作时,还会对集合中的 score 进行求和操作(还有其他操作,如最大值等)
      命令: zinterstore 保存结果的集合 参与操作的集合个数 key1 key2 ...
      
      // 多个集合的 并 操作,执行 并 操作时,还会对集合中的 score 进行求和操作(还有其他操作,如最大值等)
      命令: zunionstore 保存结果的集合 参与操作的集合个数 key1 key2 ...
      

sorted_set 类型扩展操作

未完,持续更新 ......

Redis入门&基础操作&企业级解决方案

原文:https://www.cnblogs.com/hashmap-put/p/14656723.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!