首页 > 数据库 >Redis_study_01

Redis_study_01

时间:2024-09-24 11:52:12浏览次数:3  
标签:count 01 study 元素 Redis 指定 value member key

Redis十大基本数据类型

总览:
  • 数据类型是指value的数据类型,key的数据类型固定为String

  • Redis命令不区分大小写,但是key区分大小写,因为key是唯一的

  • 都是一些命令,不懂的直接在官网上搜,里面的参数都有解释 https://redis.io/docs/latest/commands

    • 例如String里面的set

      SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |
        EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
      

      image-20240914143531787

  • 哪几种数据类型:

    image-20240924114926840

字符串String
  • 单值单value

  • 案例

    • 最常用

      • SET key value

        EX 设置过期时间 ms

        TTL 查看剩余多少时间过期

        DEL 删除指定的key

        KEEPTTL String类型重新set后会默认重置过期时间为-1,保持当前的有效时间(-1长期有效,-2已经过期)

        image-20240914160431890

      • GET key

    • 同时获取多个建值

      • MSET key value [key value…]

      • MGET key [key…]

      • MSET/MGET/MSETNX

        MSETNX 如果其中一个键存在,那其他不存在的键也会设置失败

        image-20240919102241713

    • 数值增减

      • 一定要数字才能加减

      • 递增数字

        INCR key

      • 增加指的整数

        INCRBY key increment

      • 递减数值

        DECR key

      • 减少指定的整数

        DECRBY key decrement

      image-20240919102919083

    • 获取字符串长度和内容追加

      • STRLEN key

      • APPEND key value

      • 分布式锁

        • SET lock pay ex 10 NX

          如果lock键不存在则设置过期时间为10s,否则设置失败,只有过期了才能设置,保证在有效期内只有一个线程对其访问。

        image-20240919105737181

      • 先get后set

        image-20240919110355070

  • 使用场景

    • 无限点赞,每点一次加一次
    • 是否喜欢的文章
      • 键名 user:{userId}:like:article:{articleId} 其中,{userId} 表示用户的 ID,{articleId} 表示文章的 ID。这样可以保证每个用户和文章组合都有唯一的键。
      • 值 1 表示用户喜欢这篇文章; 0 表示用户不喜欢或取消了喜欢。
列表List
  • 单key多value

  • 底层是一个双向链表,对两端的元素操作效率高点,通过索引下标来操作中间的元素性能会较差

  • 案例

    • LPUSH / RPUSH key [element…] / LRANGE key start stop

      左插入 / 右插入 / 查看指定范围的列表内容

      image-20240924115121926

    • LPOP / RPOP key

      左出列 / 右出列

      image-20240919144643555

    • LINDEX key index

      查看指定索引的value值

    • LLEN key

      查看指定list的长度

    • LREM key count element

      移除指定队列的已有元素,count 指定移除多少个,从左往右删除

    • LTRIM key start stop

      对指定队列进行截取,保存到原有队列

      image-20240919144815544

    • RPOPLPUSH sourcelist destination

      将源数据列表元素右出列,把元素左入列放到目标列表中,一条语句

    • LSET key index value

    • LINSERT key before / after element value

      image-20240919145013540

  • 使用场景

    • 微信公众号订阅消息

      将用户的订阅号信息push进用户的队列中 LPUSH likearticle:{userid} 11 22

      出栈显示 LRANGE likearticle:{userid} 0 9

哈希Hash
  • KV模式不变,但是V是一个键值对

    Map<String,Map<String,Object>>

  • 案例

    • HSET / HMSET key field value [field value …]
    • HGET key field
    • HMGET key field1 field2…
    • HGETALL key
    • HDEL key field
    • HLEN key

    image-20240919160458038

    • HEXISTS key field
    • HKEYS key
    • HVALS key
    • HINCRBY / HINCRBYFLOAT key field increment
    • HSETNX key filed value
    • HGETALL key

    image-20240919160548785

  • 应用场景

    • 早期购物车使用场景

      • 添加商品进入购物车

        HSET shopcar:uid1024 334488 1

        HSET shopcar:uid1024 334477 1

      • 修改商品数量

        HINCRBY shopcar:uid1024 334477 1

      • 获取商品总量

        HLEN shopcar:uid1024

    image-20240919160624921

集合Set
  • 单值多value, 且无重复

  • 案例

    • SADD key member [member … ]

      没有就创建,有就添加 ,默认去重,不能添加重复的元素

    • SMEMBERS key

      查看指定集合中的所有元素

    • SISMEMBER key member

      查看指定元素在指定集合中是否存在

    • SREM key member [member … ]

      删除指定集合中的一个或多个元素

    • SCARD key

      统计指定集合中的元素个数

      image-20240920113714739

    • SRANDMEMBER key [count]

      随机读取指定个数的集合中的元素,不会删除读取的元素

    • SPOP key [count]

      随机出栈指定个数的集合元素,会删除元素

    • SMOVE source destination member

      将源集合指定元素移动到目标集合中

    • SDIFF key [key …]

      求差集,(含头不含尾),如SDIFF A B 则在A内不在B内的元素

      image-20240920113805542

    • SUNION key [key …]

      求集合的并集

    • SINTER key [key …]

      求集合的交集

    • SINTERCARD numkeys key [key …] [ LIMIT limit ]

      返回指定集合的交集个数,numkeys – 集合的个数,LIMIT – 查询的个数,如果到了指定数量,就不在比下去了;(SINTERCARD 2 A B LIMIT 1 : 查A B的交集,如果满足条件则加1,到了1就不在继续查下去了 )

      image-20240920113837981

  • 应用场景

    • 微信抽奖小程序

      参与抽奖,SADD key {userid}

      统计有多少人参与,SCARD key

      抽奖,SRANDMEMBER key {number}

    • 微信朋友圈点赞,查看同赞朋友

      新增点赞,SADD pub:msgid {userid1} {userid2}

      取消点赞,SREM pub:msgid {userid}

      展现所有点赞过的用户 SMEMBERS pub:msgid

      点赞用户数统计 SCARD pub:msgid

      判断某个朋友是否对楼主点赞过 SISMEMBER pub:msgid {userid}

    • QQ上推可能认识的人

      A用户的好友 SADD A {userid1} {userid2} { … }

      B用户的好友 SADD B {userid1} {userid2} { … }

      可能认识的好友 SDIFF A B

有序集合Zset
  • 在Set的基础上,每个val 值前加一个score的分数值,之前Set是k1 v1 v2 v3。现在zset是k1 score1 v1 score2 v2 score3 v3

  • 案例

    • ZADD key score member

    • ZRANGE key start stop [withscores]

      根据score从小到大排列

    • ZREVRANGE key start stop [withscores]

      根据score从大到小排列

      image-20240920162550077

    • ZRANGEBYSCORE key min | max

      根据score范围来查找 Zset 中的val

      image-20240920163053675

    • ZSCORE key member

      根据member来查找对应的score

      image-20240920162629965

    • ZREM key member

      image-20240920163151708

    • ZINCRBY key increment member

      image-20240920163334762

    • ZCOUNT key min max

      查找在[min,max]范围的member个数

      image-20240920163448218

    • ZMPOP numkeys key min|max count num

      出栈多个元素,min从小开始,count 指定出栈元素个数

      image-20240920164818569

    • ZRANK key member

      获取member下标,顺序

    • ZREVRANK key member

      获取member下标,反序

      image-20240920165135313

  • 应用场景

    • 商品销售数量排行榜

      定义商品销售排行榜key为goods:sellsort,分数为商品销售数量

      添加销售数据,ZADD goods:sellsort 9 1001 15 1002

      销量增加,ZINCRBY goods:sellsort 2 1001

      展示销售前10名,ZRANGE goods:sellsort 0 9 withscores

Redis位图 Bitmap
  • 由0 和 1 状态表现的二进制位的bit数组

  • 应用场景

    • 用户是否登入过,比如京东每日签到送京豆
    • 电影、广告是否被点击过
    • 钉钉打卡上下班,签到统计
  • 基本命令

    • SETBIT key offset value

      offset是从 0 开始算的,如果没设置值,则默认是0

    • GETBIT key offset

    • STRLEN key

      Bitmap 本质上是String 所以对String 的命令,对bitmap 也有效

      image-20240921142822352

    • BITCOUNT key

      统计1的个数

    • BITOP and|or|xor|not destkey key [ key … ]

      对两个bitmap进行运算结果存到destkey中

      image-20240921143929729

Redis基数统计 HyperLogLog
  • 去重脱水后的数据

  • 案例

    • PFADD key [element [elment … ]]

      添加元素

    • PFCOUNT key

      统计有多少个唯一的元素

    • PFMERGE destkey [sourcekey [sourcekey … ]]

      合并两个sourcekey,去重后添加到destkey

      image-20240923182253262

  • 主要用途,统计网站的UV(独立访客)

Redis地理空间 GEO
  • 表示一个位置的经纬度

  • 案例

  • 应用场景

    • GEOADD key longitude latitude member

    • GEOPOS key member

      获取member的经纬度

    • GEOHASH key member

      获取member的hash

    • GEORADIUS key longitude latitude radius [withdist [withcoord [withhash [count num [desc ]]]]]

      根据经纬度来查看指定半径之内的地方

    • GEORADIUSBYMEMBER key member radius

      根据地点名称来查看指定半径之内的地方

      image-20240923182603200

Redis 中的 Stream
  • 是什么

    image-20240924092823778

Message content 消息内容

Consumer group 消费组,一个消费组里面有多个消费者,只要一个消费者读取了队列中的信息,并且客户端返回来ack后,其他消费者就不会在去消费这条消息。

Consumer 消费者

Last_delivered_id 每个消费组里面都有个独立的游标(last_delivered_id),用来记录当前消费组消费的信息id, 每被消费组里面的消费者消费一条消息后,游标都会往前移。

Pending_ids 用来记录消息队列中被消费组读取的信息id,每个消费者都是独立的pending_ids,但是同一个消费组共享一个pending entries list ,这个pel存储量消费组里所有待确认的信息。

  • 基本命令

    • 队列相关指令

      image-20240924100646184

    • 消费组相关指令

      image-20240924100709227

    • 四个特殊符号

      image-20240924100900007

  • 实操

    • XADD 键名 消息id(一般写*,让Redis自动生成,也可以自己写,但是有格式要求,如图 时间戳-该时间戳下的第几条数据 ) 字段名 字段值

      image-20240924112634401

    • XRANGE 键名 - + count 2

      从小到大排列 count显示数量

    • XREVRANGE 键名 + - count 2

      从大到小排列

      image-20240924112947022

    • XDEL 键名 消息id

    • XLEN 键名

      返回消息个数

    • XTRIM 键名 maxlen|minid len|msgid

      Maxlen len 允许的最大长度,截取指定长度len

      Minid msgid 截取大于等于msgid的部分

      image-20240924113819872

    • XREAD 读消息

      • 阻塞

        XREAD count 1 block 0 STREAMS msgstream $

        $ 阻塞读取比最大id还大的消息,0 一直阻塞,20阻塞20ms

        image-20240924112421416

        新消息一插入,右边消费者立马读取

        image-20240924112439882

      • 非阻塞

        XREAD count 1 streams msgstream 0-0

        0-0 从最小的开始读取

        image-20240924114538899

标签:count,01,study,元素,Redis,指定,value,member,key
From: https://blog.csdn.net/m0_51972677/article/details/142486066

相关文章

  • LeetCode 1014. 最佳观光组合
    题目简介:给你一个正整数数组 values,其中 values[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的 距离 为 j-i。一对景点(i<j)组成的观光组合的得分为 values[i]+values[j]+i-j ,也就是景点的评分之和 减去 它们两者之间的距离。返回一对观......
  • 在 Go 语言中使用 Redis 实现分布式锁
    目录在Go语言中使用Redis实现分布式锁一、分布式锁的概念和作用二、Redis实现分布式锁的原理三、在Go语言中使用Redis实现分布式锁的步骤(一)安装Redis客户端库(二)定义分布式锁结构体(三)实现获取锁的方法(四)实现释放锁的方法(五)使用分布式锁四、注意事项五、总......
  • [redis命令]字符串命令
    命令表命令含义SET设置指定key的值GET获取指定key的值GETRANGE返回key中字符串值的子字符GETSET将给定key的值设为value,并返回key的旧值(oldvalue)GETBIT对key所储存的字符串值,获取指定偏移量上的位(bit)MGET获取所有(一个或多个)给定key的值SETBIT......
  • ARS展览项目(二)——环境搭建:opencv、dlib、VS2017
    先说用到的软件和函数库VS2017——我用VS2017社区版来开发,原因是软件免费而且好用,本项目用C++来做opencv——OpenComputerVision是计算机视觉的库,有多种语言的接口,而且函数库也很丰富dlib——Dlib是一个包含机器学习算法的C++开源工具包,提供大量的机器学习/图像处理算法(网......
  • redisson内存泄漏问题排查
    问题描述最近生产有个服务突然出现频繁告警,接口P99响应时间变长,运维同学观察到相应的podcpu飙升,内存占用很高。cpu升高问题排查是老生常谈的话题了,一般可以使用top-ppid-H查看是哪个线程占用cpu高,再结合jstack找到对应的java线程代码。不过经验告诉我们,cpu升高还有另外一个......
  • Redis基础
    Redis基础一、认识Redis1.Redis简述NoSQL(NotOnlySQL):意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。Redis(RemoteDictionaryService):远程词典服务器,基于内存的键值型NoSQL数据库。特征:键值(Key-value)型,value支持多种不同数据结构,功能丰富单线程,每个命......
  • Redis系列补充:聊聊布隆过滤器(go语言实践篇)
    ★Redis24篇集合1介绍布隆过滤器(BloomFilter)是Redis4.0版本之后提供的新功能,我们一般将它当做插件加载到RedisService服务器中,给Redis提供强大的滤重功能。它是一种概率性数据结构,可用于判断一个元素是否存在于一个集合中。相比较之Set集合的去重功能,布隆过滤器空......
  • DC00013基于jsp servlet javabeen鲜花销售管理系统网上花店含配套报告
    1、项目功能演示DC00013基于jsp+servlet+javabeen鲜花销售管理系统网上花店网站鲜花销售网上花店管理系统2、项目功能描述 基于jsp+servlet+javabeen鲜花销售管理系统分为用户和系统管理员两个角色。2.1用户功能1、系统登录、系统注册2、主页、产品信息、联系我们3......
  • NEERC2013题解
    B.BonusCards简单dp一下,记\(f_{ij}\)为前i次有j次分给第一类的概率。最后再算上我在第一类被选上的概率即可。constintN=3005;#defineintlonglongintn,a,b;doublef[N][N],g[N][N];signedmain(void){#ifdefONLINE_JUDGE freopen("bonus.in","r",stdin......
  • 923kmp 01背包
    kmp遍历一次主串匹配子串求next数组看前后缀相同的个数不匹配时根据next的值移动p3375点击查看代码voidgetNext(strings,intnextt[]){intj=0;nextt[0]=0;for(inti=1;i<s.size();i++){while(j>0&&s[i]!=s[j]){......