Redis--(三)Redis数据类型

(一)思维导图

先放一张我整理的Redis思维导图,大家一起学习

(二)Redis-数据类型

1.String

概念:

        String是Redis最基础的数据结构类型,它是二进制安全的,可以存储图片或者序列化的对象,值最大存储为512M

命令:

  1. set xxx "123"
  2. get xxx "123"

应用场景:

  1. 缓存对象
  2. 常规计数
  3. 分布式锁
  4. 共享 session 信息

2.Set

概念:

        String 元素组成的无序集合,通过哈希表实现(增删改查时间复杂度为 O(1)),不允许重复。对于集合的使用,也有一些常见的方式,比如,QQ有一个社交功能叫做“好友标签”,大家可以给你的好友贴标签,比如“大美女”、“土豪”、“欧巴”等等,这时就可以使用redis的集合来实现,把每一个用户的标签都存储在一个集合之中

命令:

  1. sadd myset "one"(添加数据)
  2. smembers myset(打印集合)
  3. sismember myset "one"(集合中是否存在)
  4. sunion(并集)

应用场景:

  1. 点赞
  2. 共同关注
  3. 聚合计算(并集、交集、差集)场景
  4. 抽奖活动
  5. 标签

3.Zset

概念:

        有序集合(sorted sets),因为在redis中,有序集合相关的操作指令都是以z开头的,比如zrange、zadd、zrevrange、zrangebyscore等等,所以我们都将redis中的有序集合叫做zsets

命令:

  1. zadd myzset 1 baidu.com(添加)
  2. zrange myzset 0 -1 with scores(列出myzset的所有元素,同时列出其序号)

应用场景:

  1. 排序场景
  2. 排行榜
  3. 电话和姓名排序

4.Hash

概念:

Hash类型,也叫散列,其value是一个无序字典,类似于Java中的HashMap结构,Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD

命令:

  1. hmset Object name "xxx"  age 12 
  2. hmget Object name hmget Object age

应用场景:

  1. 缓存对象
  2. 购物车

5.Stream

概念:

        Redis5.0 中增加,它借鉴了Kafka的设计,是一个新的强大的支持多播的可持久化的消息队列,相比于基于 List 类型实现的消息队列,有这两个特有的特性:自动生成全局唯一消息ID,支持以消费组形式消费数据

命令:

  1. XADD - 添加消息到末尾
  2. XTRIM - 对流进行修剪,限制长度
  3. XDEL - 删除消息
  4. XLEN - 获取流包含的元素数量,即消息长度
  5. XRANGE - 获取消息列表,会自动过滤已经删除的消息
  6. XREVRANGE - 反向获取消息列表,ID 从大到小
  7. XREAD - 以阻塞或非阻塞方式获取消息列表

应用场景:

消息队列,Redis对消息队列(MQ,Message Queue)的完善实现

6.List

概念:

        Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索,特征也与LinkedList类似。

命令:

  1. lpush testList "one"(向左插入)
  2. rpush testList "one"(向右插入)
  3. lrange(从左向右)

应用场景:

  1. 朋友圈点赞列表
  2. 评论列表

7.BitMap

概念:

        BitMap是一种实现对位的操作的数据结构,但是其实它本身并不是数据结构,底层其实是字符串,是借助字符串进行位操作的,但是BigMap在Redis中使用却和字符串不太一样,可以理解为这是一个以位为单位的数组,数组的每个单元格存放的是1或者0,数组的下标在BitMaps中被称为偏移量。BigMap在Redis中最大上限是512M,转换为bit则是 2^32个bit位,原理是:redis内构建一个足够长的数组,每个数组元素只能是0和1两个值,然后这个数组的下标index用来表示用户id(必须是数字哈),那么很显然,这个几亿长的大数组就能通过下标和元素值(0和1)来构建一个记忆系统

命令:

  1. SETBIT:向指定位置(offset)存入一个0或1
  2. GETBIT :获取指定位置(offset)的bit值
  3. BITCOUNT :统计BitMap中值为1的bit位的数量
  4. BITFIELD :操作(查询、修改、自增)BitMap中bit数组中的指定位置(offset)的值
  5. BITFIELD_RO :获取BitMap中bit数组,并以十进制形式返回
  6. BITOP :将多个BitMap的结果做位运算(与 、或、异或)
  7. BITPOS :查找bit数组中指定范围内第一个0或1出现的位置

应用场景:

  1. 二值状态统计的场景,比如签到、判断用户登陆状态、连续签到用户总数
  2. 布隆过滤器解决缓存穿透。

8.Geospatial

概念:

        Redis 在 3.2 版本中加入了地理空间(geospatial)以及索引半径查询的功能,主要用在需要地理位置的应用上。将指定的地理空间位置(经度、纬度、名称)添加到指定的 key 中,这些数据将会存储到 sorted set。这样的目的是为了方便使用 GEORADIUS 或者 GEORADIUSBYMEMBER 命令对数据进行半径查询等操作。也就是说,推算地理位置的信息,两地之间的距离,“附近的人”等等场景都可以用它实现。geo 底层原理是使用 zset来实现的        

命令:

  1. GEOADD china:city 121.47 31.23 shanghai
  2. GEOADD china:city 116.40 39.90 beijing
  3. GEODIST china:city shanghai beijing km((只支持m,km,ft,mi))
  4. GEOHASH china:city shanghai beijing

应用场景:

  1. 存储地理位置信息的场景,比如滴滴叫车;
  2. 附近人

9.Hyperloglog

概念:

        Redis中的HyperLogLog是一种基于基数估算的算法,所谓基数估算就是在一批数据中的元素个数有多少个不重复

命令:

  1. PFADD hll a b c d e f g h
  2. PFCOUNT hll

应用场景:

  1. 海量数据基数统计的场景,比如百万级网页 UV 计数等
  2. Redis中的HyperLogLog是一种基于基数估算的算法,所谓基数估算就是在一批数据中的元素个数有多少个不重复PFADD hll a b c d e f g hPFCOUNT hllRedis中的HLL是基于string结构实现的,单个HLL的内存,的令人发指!作为代价,其测量结果是概率性的,。不过对于UV统计来说,这完全可以忽略永远小于16kb内存占用低有小于0.81%的误差

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值