码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • redis基础2——key的基础使用、五大数据类型和三大特殊数据类型


    文章目录

    • 一、Key的基础使用
      • 1.1 更换数据库
      • 1.2 查看数据库大小
      • 1.3 查看数据库所有key
      • 1.4 清除当前数据库
      • 1.5 清除所有数据库
      • 1.6 判断key是否存在
      • 1.7 移动key
      • 1.8 设置key的过期时间
      • 1.9 查看key的数据类型
    • 二、五大数据类型
      • 2.1 字符串型(string)
        • 2.1.1 设置key值
          • 2.1.1.1 普通赋值
          • 2.1.1.2 不存在才赋值
          • 2.1.1.3 批量赋值
          • 2.1.1.4 原子性批量赋值
          • 2.1.1.5 设置对象
          • 2.1.1.6 追加
        • 2.1.2 获取key值
          • 2.1.2.1 普通取值
          • 2.1.2.2 先取值再赋值
          • 2.1.2.3 获取key值长度
        • 2.1.5 自增自减
          • 2.1.5.1 自增一个值
          • 2.1.5.2 自减一个值
          • 2.1.5.3 设置步长自增
          • 2.1.5.4 设置步长自减
        • 2.1.6 范围取值
        • 2.1.7 替换字符串
        • 2.1.8 设置过期时间
      • 2.2 集合(set)
          • 2.2.1 赋值
        • 2.2.2 取值
          • 2.2.2.1 所有元素
          • 2.2.2.2 判断元素是否存在
          • 2.2.2.3 获取集合里元素个数
          • 2.2.2.4 取随机元素
          • 2.2.2.5 差集
          • 2.2.2.6 交集
          • 2.2.2.7 并集
        • 2.2.3 删除
          • 2.2.3.1 指定元素
          • 2.2.3.2 随机元素
        • 2.2.4 移动
      • 2.3 列表(list)
        • 2.3.1 赋值
          • 2.3.1.1 从左插入
          • 2.3.1.2 从右插入
          • 2.3.1.3 元素前后插入
          • 2.3.1.4 指定下标赋值
        • 2.3.2 取值
          • 2.3.2.1 查看所有元素
          • 2.3.2.2 查看指定下标位元素
          • 2.3.2.3 查询列表元素个数
          • 2.3.2.4 查询列表是否存在
        • 2.3.3.删除
          • 2.3.3.1 从左删除
          • 2.3.3.2 从右删除
          • 2.3.3.3 删除指定元素
        • 2.3.4 截取
          • 2.3.4.1 截取下标范围的元素
        • 2.3.5 移动
          • 2.3.5.1 移除列表最后一个元素到新列表中(组合命令)
      • 2.4 哈希(hash)
        • 2.4.1 赋值
          • 2.4.1.1 单个哈希
          • 2.4.1.2 多个哈希
          • 2.4.1.3 不存在才赋值
          • 2.4.1.4 自增
        • 2.4.2 取值
          • 2.4.2.1 单个哈希
          • 2.4.2.2 多个哈希
          • 2.4.2.3 获取集合内所有键值对
          • 2.4.2.4 获取所有key
          • 2.4.2.5 获取所有value
          • 2.4.2.6 获取集合内的key数量
          • 2.4.2.7 判断集合内的key是否存在
        • 2.4.3 删除
          • 2.4.3.1 删除指定key
      • 2.5 有序集合(zset)
        • 2.5.1 赋值
        • 2.5.2 取值
          • 2.5.2.1 正序查询指定下标范围元素
          • 2.5.2.2 倒叙查询指定下标范围元素
          • 2.5.2.3 查询集合内的元素个数
          • 2.5.2.4 查询区间元素数量
        • 2.5.3 排序
          • 2.5.3.1 正序
          • 2.5.3.2 倒序
    • 三、三种特殊数据类型
      • 3.1 geospatial地理位置
        • 3.1.1 赋值
          • 3.1.1.1 添加
        • 3.1.2 取值
          • 3.1.2.1 key内元素
          • 3.1.2.2 经纬度
          • 3.1.2.3 两个位置的距离
          • 3.1.2.4 半径内的元素
            • 3.1.2.4.1 返回元素名称
            • 3.1.2.4.2 返回元素名称+中心距离
            • 3.1.2.4.3 返回元素名称+经纬度
            • 3.1.2.4.4 限制返回元素个数
            • 3.1.2.4.5 降序排序
            • 3.1.2.4.6 升序排序
          • 3.1.2.5 指定范围内的元素
          • 3.1.2.6 经纬度字符串
        • 3.1.3 删除
          • 3.1.3.1 指定元素
      • 3.2 HyperLogLog基数
        • 3.2.1 基数作用
        • 3.2.2 概述
        • 3.2.3 赋值
          • 3.2.3.1 添加元素
          • 3.2.4 取值
          • 3.2.4.1 获取基值
        • 3.2.5 合并
          • 3.2.5.1 并集合并
      • 3.3 Bitmap位图
        • 3.3.1 赋值
          • 3.3.1.1 单项赋值
        • 3.3.2 取值
          • 3.3.2.1 单项取值
          • 3.3.2.2 统计

    一、Key的基础使用

    • redis默认有16个数据库,默认使用第0个数据库。

    在这里插入图片描述
    在这里插入图片描述

    1.1 更换数据库

    select

    在这里插入图片描述

    1.2 查看数据库大小

    dbsize

    在这里插入图片描述

    1.3 查看数据库所有key

    keys *

    在这里插入图片描述

    1.4 清除当前数据库

    flushdb

    在这里插入图片描述

    1.5 清除所有数据库

    flushall

    在这里插入图片描述

    1.6 判断key是否存在

    exists

    在这里插入图片描述

    1.7 移动key

    move

    在这里插入图片描述

    1.8 设置key的过期时间

    expire

    在这里插入图片描述

    1.9 查看key的数据类型

    type

    在这里插入图片描述

    二、五大数据类型

    在这里插入图片描述

    2.1 字符串型(string)

    字符串型使用场景比较多,比如抖音粉丝数这种就可以实现,也还可以做计数器、统计多单位的数量、对象缓存存储。

    2.1.1 设置key值

    2.1.1.1 普通赋值

    set

    在这里插入图片描述

    • set同一个key时,会覆盖之前的值。

    在这里插入图片描述

    2.1.1.2 不存在才赋值

    setnx

    在这里插入图片描述

    2.1.1.3 批量赋值

    mset

    在这里插入图片描述

    2.1.1.4 原子性批量赋值

    msetnx:要么一起成功,要么一起失败,体现原子性。

    在这里插入图片描述

    2.1.1.5 设置对象

    设置一个对象:set [对象] {条目1:内容1,条目2:内容2}

    在这里插入图片描述

    设置多个对象:set [对象1] {条目1:内容1,条目2:内容2} [对象2] {条目1:内容1,条目2:内容2}

    在这里插入图片描述

    2.1.1.6 追加

    append

    在这里插入图片描述

    2.1.2 获取key值

    2.1.2.1 普通取值

    get

    在这里插入图片描述

    2.1.2.2 先取值再赋值

    getset

    在这里插入图片描述

    2.1.2.3 获取key值长度

    strlen

    在这里插入图片描述

    2.1.5 自增自减

    2.1.5.1 自增一个值

    incr

    在这里插入图片描述

    2.1.5.2 自减一个值

    decr

    在这里插入图片描述

    2.1.5.3 设置步长自增

    incrby

    在这里插入图片描述

    2.1.5.4 设置步长自减

    decrby

    在这里插入图片描述

    2.1.6 范围取值

    getrange

    在这里插入图片描述

    2.1.7 替换字符串

    setrange

    在这里插入图片描述

    2.1.8 设置过期时间

    setex =set with expire,单位为秒。

    在这里插入图片描述

    setex key seconds value =set key value ex seconds。单位为秒。

    在这里插入图片描述

    2.2 集合(set)

    应用场景:共同关注、共同好友。

    2.2.1 赋值

    sadd

    在这里插入图片描述

    • 用redis客户端连接显示效果
      在这里插入图片描述
    • set 集合里不能存在相同的值,插入相同值会失败。
      在这里插入图片描述

    2.2.2 取值

    2.2.2.1 所有元素

    smembers

    在这里插入图片描述

    2.2.2.2 判断元素是否存在

    sismember

    在这里插入图片描述

    2.2.2.3 获取集合里元素个数

    scard

    在这里插入图片描述

    2.2.2.4 取随机元素

    srandmember

    在这里插入图片描述

    2.2.2.5 差集

    sdiff

    在这里插入图片描述

    2.2.2.6 交集

    sinter

    在这里插入图片描述

    2.2.2.7 并集

    sunion

    在这里插入图片描述

    2.2.3 删除

    2.2.3.1 指定元素

    srem

    在这里插入图片描述

    2.2.3.2 随机元素

    spop

    在这里插入图片描述

    2.2.4 移动

    smove

    在这里插入图片描述

    2.3 列表(list)

    在redis里,可以把List当成栈、队列来使用。
    list是一个链表,可以从左往右插入,也可以从右往左插入,还可以左右两边同时插入。
    如果key不存在,会创建新的链表。
    若把里面的所有元素移除,空链表也代表不存在。
    从两边插入或改动值,效率最高;从中间元素操作,效率低。
    使用场景:消息队列。

    2.3.1 赋值

    2.3.1.1 从左插入

    lpush

    在这里插入图片描述

    • 从左插入一个值

    在这里插入图片描述

    • 从左插入多个值

    在这里插入图片描述

    2.3.1.2 从右插入

    rpush

    在这里插入图片描述

    在这里插入图片描述

    2.3.1.3 元素前后插入

    linsert

    在这里插入图片描述

    2.3.1.4 指定下标赋值

    lset

    在这里插入图片描述

    2.3.2 取值

    2.3.2.1 查看所有元素

    lrange

    在这里插入图片描述

    2.3.2.2 查看指定下标位元素

    lindex

    在这里插入图片描述

    2.3.2.3 查询列表元素个数

    llen

    在这里插入图片描述

    2.3.2.4 查询列表是否存在

    exists

    在这里插入图片描述

    2.3.3.删除

    2.3.3.1 从左删除

    lpop,删除下标位为0的元素,也是最后进入的元素。

    在这里插入图片描述

    2.3.3.2 从右删除

    rpop,删除下标位最末端的元素,也是第一个插入列表的元素。

    在这里插入图片描述

    2.3.3.3 删除指定元素

    lrem

    在这里插入图片描述

    2.3.4 截取

    2.3.4.1 截取下标范围的元素

    ltrim

    在这里插入图片描述

    2.3.5 移动

    2.3.5.1 移除列表最后一个元素到新列表中(组合命令)

    rpoplpush
    在这里插入图片描述

    2.4 哈希(hash)

    哈希是一个map集合,可以把它的key看成一个集合,而集合里是kv键值对的数据,类似 key- < key-value >,常用于对象存储。

    2.4.1 赋值

    2.4.1.1 单个哈希

    hset

    在这里插入图片描述

    • redis客户端展示效果

    在这里插入图片描述

    2.4.1.2 多个哈希

    hmset

    在这里插入图片描述

    2.4.1.3 不存在才赋值

    hsetnx

    在这里插入图片描述

    2.4.1.4 自增

    hincrby,哈希没有自减命令,用自增负数实现自减。

    在这里插入图片描述

    2.4.2 取值

    2.4.2.1 单个哈希

    hget

    在这里插入图片描述

    2.4.2.2 多个哈希

    hmget

    在这里插入图片描述

    2.4.2.3 获取集合内所有键值对

    hgetall

    在这里插入图片描述

    2.4.2.4 获取所有key

    hkeys

    在这里插入图片描述

    2.4.2.5 获取所有value

    hvals

    在这里插入图片描述

    2.4.2.6 获取集合内的key数量

    hlen

    在这里插入图片描述

    2.4.2.7 判断集合内的key是否存在

    hexists

    在这里插入图片描述

    2.4.3 删除

    2.4.3.1 删除指定key

    hdel

    • 删除一个key

    在这里插入图片描述

    • 删除多个key

    在这里插入图片描述

    2.5 有序集合(zset)

    应用场景:抖音排行榜

    2.5.1 赋值

    zadd

    在这里插入图片描述

    • redis客户端显示效果

    在这里插入图片描述

    2.5.2 取值

    2.5.2.1 正序查询指定下标范围元素

    zrange,可以把显示的结果看成一个从上往下排序的列表,正向排序就是从上往下数。

    在这里插入图片描述

    2.5.2.2 倒叙查询指定下标范围元素

    zrevrange

    在这里插入图片描述

    2.5.2.3 查询集合内的元素个数

    zcard

    在这里插入图片描述

    2.5.2.4 查询区间元素数量

    zcount

    在这里插入图片描述

    2.5.3 排序

    2.5.3.1 正序

    zrangebyscore

    • 负无穷到正无穷,-inf,+inf

    在这里插入图片描述

    • 排序结果带上分数

    在这里插入图片描述

    • 只取结果小于特定值的元素(3000)

    在这里插入图片描述

    • 排序结果只取0到1条

    在这里插入图片描述

    2.5.3.2 倒序

    在这里插入图片描述

    三、三种特殊数据类型

    3.1 geospatial地理位置

    3.1.1 赋值

    3.1.1.1 添加

    geoadd
    作用:将给定的空间元素(纬度、经度、地名)添加到指定的键里面。
    语法: geoadd key longitude latitude member…

    • geoadd 命令以标准的x,y格式接受参数,使用时必须先输入经度,然后再输入纬度。
    • geoadd 能够记录的坐标是有限的,非常接近地球两极区域的经纬度无法被索引。
    • 有效的经度介于 -180 ~ 180 度之间,有效的纬度介于 -85.05112878 ~ 85.05112878 度之间。当输入超出范围的经度或者纬度时,geoadd将返回一个错误。
    • 这些数据会以有序集的形式被储存在键里面,从而使得 georadius 和georadiusbymember 这样的命令可以在之后通过位置查询取得这些元素。
      应用场景:附近位置、微信摇一摇、滴滴打车等这类依赖于地理位置信息的功能。

    在这里插入图片描述

    3.1.2 取值

    3.1.2.1 key内元素

    zrange
    用法:geo 的数据类型为 zset,可以用zrange取key内元素。

    在这里插入图片描述

    3.1.2.2 经纬度

    geopos
    作用:从Key里取给定位置元素的经度、维度。
    语法:geopos key member [member1 member2 ]

    在这里插入图片描述

    3.1.2.3 两个位置的距离

    geodist
    作用:取两个给定位置之间的距离。如果两个位置之中,有一个不存在,则命令返回空值。
    语法:geodist key member1 member2 [unit]
    指定单位的参数 unit 必须是以下单位的其中一个:

    • m :表示单位为米
    • km :表示单位为千米
    • mi :表示单位为英里
    • ft :表示单位为英尺
    • 如果没有指定单位,geodist默认使用米作为单位。
    • geodist在计算距离时,会假设地球为完美的球形,在极限情况下,这一假设最大会造成0.5%的误差。

    在这里插入图片描述

    3.1.2.4 半径内的元素

    georadius
    作用:取以给定的经纬度为中心,给定半径内的元素。
    语法:georadius key longitude latitude radius m|km|ft|mi [withcoord] [withdist] [withhash] [asc] [desc] [count count]

    3.1.2.4.1 返回元素名称

    在这里插入图片描述

    3.1.2.4.2 返回元素名称+中心距离

    withdist (参数)

    在这里插入图片描述

    3.1.2.4.3 返回元素名称+经纬度

    withcoord(参数)

    在这里插入图片描述

    3.1.2.4.4 限制返回元素个数

    count (参数)

    在这里插入图片描述

    3.1.2.4.5 降序排序

    desc(参数)

    在这里插入图片描述

    3.1.2.4.6 升序排序

    asc(参数)

    在这里插入图片描述

    3.1.2.5 指定范围内的元素

    georaidusbymember
    作用:取出指定范围内的元素,中心点是由给定的位置元素决定。
    语法:georadiusbymember key member radius m|km|ft|mi [withcoord] [withdist] [withhash] [asc] [desc] [count count]

    在这里插入图片描述

    3.1.2.6 经纬度字符串

    geohash
    作用:将二维经纬度转换为一维字符串,字符串越长表示位置更精确,两个字符串越相似表示距离越近。
    语法:geohash key member [member1] [member2]

    在这里插入图片描述

    3.1.3 删除

    3.1.3.1 指定元素

    zrem
    用法:GEO 没有提供删除成员的命令,但是因为 GEO 的底层实现是 zset,所以可以借用 zrem 命令实现对地理位置信息的删除。

    在这里插入图片描述

    3.2 HyperLogLog基数

    3.2.1 基数作用

    作用:用于集合,指集合中不重复的元素个数,可以接受误差。
    示例:
    A{1,3,5,7,9,8,7} ,基数为6。
    B{1,3,5,7},基数为4。

    3.2.2 概述

    背景:redis在2.8.9版本添加了hyperloglog结构,用来做基数统计的算法。
    优点:在输入元素的数量或体积非常大时,计算基数所需的空间总是固定的,并且是很小的。每个HyperLogLog键只占用12KB的内存,就可以计算接近2^64个不同元素的基数。
    用途:HyperLogLog是一种算法,提供了不精确的去重计数方案。 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。
    应用场景:

    • 统计网页的浏览用户数量,一天内同一个用户多次访问只算一次。传统方案是使用set来保存用户id,然后统计set中的元素数量。
    • 传统方案只能承载少量用户,一旦用户数量大起来就需要消耗大量的空间。
    • 传统方案更偏重于保存用户,而非统计用户数量,使用传统方案可以达到目的,但吃力不讨好,而使用HyperLogLog最多需要12K就可以统计大量的用户数。
    • 尽管HyperLogLog大概有0.81%的错误率,但对于统计用户数量这种不需要很精确的数据是可以忽略不计的。

    3.2.3 赋值

    3.2.3.1 添加元素

    pfadd
    语法:pfadd key element [element…]

    在这里插入图片描述

    3.2.4 取值
    3.2.4.1 获取基值

    pfcount
    语法:pfcount key [key1 key2 …]

    在这里插入图片描述

    3.2.5 合并

    3.2.5.1 并集合并

    pfmerge
    语法:pfmerge destkey sourcekey [sourcekey1 sourcekey2…]

    在这里插入图片描述

    3.3 Bitmap位图

    背景:Redis 从 2.2 版本增加了 Bitmap(位图)。
    应用场景:

    • 可以统计用户一年的某些信息,如账户活跃或不活跃,登录或不登录,打卡或没打卡。如果使用普通的 key / value存储,则要记录 365 条记录,如果用户量很大,需要的空间也会很大。而Redis 提供了 Bitmap 位图这种数据结构,Bitmap 就是通过操作二进制位来进行记录,即为 0 和 1。
    • 如果要记录 365 天的打卡情况,使用 Bitmap 表示的形式大概如下:0101000111000111……,这样 365 天相当于 365 bit,又 1 字节 = 8 bit , 所以相当于使用 46 个字节即可。
    • BitMap 就是通过一个 bit 位来表示某个元素对应的值或者状态,其中的 key 就是对应元素本身。

    3.3.1 赋值

    3.3.1.1 单项赋值

    setbit
    语法:setbit key offset value 。设置key的第offset位为value(0或1)

    在这里插入图片描述

    3.3.2 取值

    3.3.2.1 单项取值

    getbit
    语法:getbit key offset

    在这里插入图片描述

    • 获取 offset 设置的值,未设置过默认返回 0。

    在这里插入图片描述

    3.3.2.2 统计

    bitcount
    语法:bitcount key [start,end] 统计key上位的值为1的个数。

    在这里插入图片描述

  • 相关阅读:
    『 Linux | 1 』VMware上安装Ubuntu22.04
    grafana InfluxDB returned error: error reading influxDB 400错误解决
    在日常开发中,敏感数据应该如何保存或传输
    day 1 704 二分查找、27 移除元素 3de10a93119644fab12fdc47cbff2d1d
    如何实现异步通知的重试机制
    Properties配置文件
    i18n国际化配置文件配置步骤
    一起Talk Android吧(第四百二十三回:给图片添加阴影)
    Qt应用开发(基础篇)——树结构视图 QTreeView
    【技巧】Win11 右键新建菜单没有文本文档选项
  • 原文地址:https://blog.csdn.net/yi_qingjun/article/details/128109805
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号