Redis--5种数据类型的基本操作

学习地址推荐

String(字符串类型)

  • String 是 Redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。
  • String 类型是二进制安全的。Redis 的 String 可以包含任何数据。比如jpg图片或者序列化的对象
  • String 类型是 Redis 最基本的数据类型,String 类型的值最大能存储 512MB。

基本操作

  • 添加 / 修改数据:set key value
  • 获取数据:get key
  • 删除数据:del key
  • 添加 / 修改多个数据:mset key value key1 value1
  • 获取多个数据:mget key key1
  • 追加信息到原始数据后边(不存在时则添加):append key value

增减操作

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

    • 默认每次加1:incr key
    • 每次新增value:incrby key value
  • 设置数据减少指定范围的值
    • 默认每次减1:decr key
    • 每次减少value:decrby key value

时效操作

  • 设置过期时间:setex key seconds value

Hash

  • Redis hash 是一个键值(key=>value)对集合。
  • Redis hash 是一个 String 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。

基本操作

  • 添加 / 修改数据:hset key field value
  • 获取数据
    • 获取一个:hget key field
    • 获取多个:hgetall key
  • 删除数据:hdel key field field1
  • 添加 / 修改多个数据:hmset key field value field1 value1
  • 获取多个数据:hmget key field field1
  • 获取表中字段数量:hlen key
  • 获取表中是否存在某个字段:hexists key field

扩展操作

  • 获取hash表中所有的字段key:hkeys key
  • 获取hash表中所有的字段值:hvals key
  • 设置指定字段的数值增加指定范围的值:
    • hincrby key field increment
    • hincrbyfloat key field increment

List(列表)

  • 数据存储需求:存储多个数据,并对数据进行存储空间的顺序进行区分

  • 需要的数据结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序

  • list类型:保存多个数据,底层使用双向链表存储结构实现

  • 列表(list)用于存储多个有序的字符串。列表是一种比较灵活的数据结构,可以充当栈和队列的角色,在实际开发上有很多应用场景

    列表的特点:

    1. 列表中的元素是有序的,可以通过索引下标来获取某个元素或者某个范围内的元素列表
    2. 列表中的元素是可以重复的

基本操作

  • 添加 / 修改数据

    • 左边添加: lpush key value value1
    • 右边添加:rpush key value value1
  • 获取数据
    • lrange key start end
    • lindex key index
    • llen key
  • 删除数据
    • rpop key
    • lpop key

扩展操作

  • 在规定时间内获取并移除数据

    • blpop key1 key2 timeout
    • brpop key1 key2 timeout

Set(集合)

  • 新的存储需求:存储大量的数据,在查询方便提供更高的效率
  • 需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
  • Set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的

基本操作

  • 添加 / 修改数据:sadd key member member1
  • 获取数据:smembers key
  • 删除数据:srem key member1
  • 获取集合数据总量:scard key
  • 判断集合中是否包含指定数据:sismember key member

扩展操作(随机取数,交、并、差集)

  • 随机获取集合中指定数量的数据:srandmember key count
  • 随机获取集合中某个数据并将改数据集移除集合:spop key

两个集合的交、并、差集

  • sinter key key1
  • sunion key key1
  • sdiff key key1

两个集合的交、并、差集并存储到指定集合中

  • sinterstore destination key1 key2
  • sunionstore destination key1 key2
  • sdiffstore destination key1 key2

ZSet(Sorted Set 有序集合)

在之前的四个类型中都不支持排序的,下来咱们看的sorted_set类型是既支持存储大数据,也支持排序功能。

基本操作

  • 添加数据:zadd key score member
  • 获取数据
    • zrange key start stop
    • zrevrange key start stop
  • 删除数据:zrem key member
> zadd zset1 10 setVal1
(integer) 1
> zadd zset1 9 setVal2
(integer) 1
> zadd zset1 10 setVal3
(integer) 1> zrange zset1 0 -1
1) "setVal2"
2) "setVal1"
3) "setVal3"
> zrange zset1 0 -1 withscores
1) "setVal2"
2) 9.0
3) "setVal1"
4) 10.0
5) "setVal3"
6) 10.0
> zrevrange zset1 0 -1 withscores
1) "setVal3"
2) 10.0
3) "setVal1"
4) 10.0
5) "setVal2"
6) 9.0> zrem zset1 setVal1
1

扩展操作

  • 按条件获取数据:

    • zrangebyscore key min max
    • zrevrangescore key max min
  • 条件删除数据:
    • zremrangebyrank key start stop
    • zremrangebyscore key min max
  • 获取集合数据总量:
    • zcard key
    • zcount key min max
> zrangebyscore test 2 3
1) "val2"
2) "val3"
> zrevrangebyscore test 3 2
1) "val3"
2) "val2"> zremrangebyrank test 0 1
(integer) 2
> zremrangebyscore test 0 1
0> zcard test
3
> zcount test 1 3
3
  • 集合交、并操作:

    • zinterstore destination numkeys key

    • zunionstore destination numkeys key

      (这个指令就不做演示了,可以自己查看文档。跟set有点类似,只不过会把所有交集的和给加起来。然后这里边有个numkeys这个参数是一共几个key进行计算 后边的key就需要几个)

  • 获取数据对应的索引:

    • zrank key member
    • zrevrank key member
  • socre值获取与修改:

    • zscore key member
    • zincrby key increment member

Redis其他的数据类型

bitmap 位图

Redis 中的 bitmap 位图是一串连续的二进制数字,底层实际是基于 string 进行封装存储的,按 bit 位进行指令操作的。bitmap 中每一 bit 位所在的位置就是 offset 偏移,可以用 setbit、bitfield 对 bitmap 中每个 bit 进行置 0 或置 1 操作,也可以用 bitcount 来统计 bitmap 中的被置 1 的 bit 数,还可以用 bitop 来对多个 bitmap 进行求与、或、异或等操作。

bitmap 位图的特点是按位设置、求与、求或等操作很高效,而且存储成本非常低,用来存对象标签属性的话,一个 bit 即可存一个标签。可以用 bitmap,存用户最近 N 天的登录情况,每天用 1 bit,登录则置 1。个性推荐在社交应用中非常重要,可以对新闻、feed 设置一系列标签,如军事、娱乐、视频、图片、文字等,用 bitmap 来存储这些标签,在对应标签 bit 位上置 1。对用户,也可以采用类似方式,记录用户的多种属性,并可以很方便的根据标签来进行多维度统计。bitmap 位图的重要指令包括:setbit、 getbit、bitcount、bitfield、 bitop、bitpos 等。

在移动社交时代,LBS 应用越来越多,比如微信、陌陌中附近的人,美团、大众点评中附近的美食、电影院,滴滴、优步中附近的专车等。要实现这些功能,就得使用地理位置信息进行搜索。地球的地理位置是使用二维的经纬度进行表示的,我们只要确定一个点的经纬度,就可以确认它在地球的位置。

Redis 在 3.2 版本之后增加了对 GEO 地理位置的处理功能。Redis 的 GEO 地理位置本质上是基于 sorted set 封装实现的。在存储分类 key 下的地理位置信息时,需要对该分类 key 构建一个 sorted set 作为内部存储结构,用于存储一系列位置点。

在存储某个位置点时,首先利用 Geohash 算法,将该位置二维的经纬度,映射编码成一维的 52 位整数值,将位置名称、经纬度编码 score 作为键值对,存储到分类 key 对应的 sorted set 中。

需要计算某个位置点 A 附近的人时,首先以指定位置 A 为中心点,以距离作为半径,算出 GEO 哈希 8 个方位的范围, 然后依次轮询方位范围内的所有位置点,只要这些位置点到中心位置 A 的距离在要求距离范围内,就是目标位置点。轮询完所有范围内的位置点后,重新排序即得到位置点 A 附近的所有目标。

  • 使用 geoadd,将位置名称(如人、车辆、店名)与对应的地理位置信息添加到指定的位置分类 key 中;
  • 使用 geopos 方便地查询某个名称所在的位置信息;
  • 使用 georadius 获取指定位置附近,不超过指定距离的所有元素;
  • 使用 geodist 来获取指定的两个位置之间的距离。

这样,是不是就可以实现,找到附近的餐厅,算出当前位置到对应餐厅的距离,这样的功能了?

Redis GEO 地理位置,利用 Geohash 将大量的二维经纬度转一维的整数值,这样可以方便的对地理位置进行查询、距离测量、范围搜索。但由于地理位置点非常多,一个地理分类 key 下可能会有大量元素,在 GEO 设计时,需要提前进行规划,避免单 key 过度膨胀。

Redis 的 GEO 地理位置数据结构,应用场景很多,比如查询某个地方的具体位置,查当前位置到目的地的距离,查附近的人、餐厅、电影院等。GEO 地理位置数据结构中,重要指令包括 geoadd、geopos、geodist、georadius、georadiusbymember 等。

hyperLogLog 基数统计

Redis 的 hyperLogLog 是用来做基数统计的数据类型,当输入巨大数量的元素做统计时,只需要很小的内存即可完成。HyperLogLog 不保存元数据,只记录待统计元素的估算数量,这个估算数量是一个带有 0.81% 标准差的近似值,在大多数业务场景,对海量数据,不足 1% 的误差是可以接受的。

Redis 的 HyperLogLog 在统计时,如果计数数量不大,采用稀疏矩阵存储,随着计数的增加,稀疏矩阵占用的空间也会逐渐增加,当超过阀值后,则改为稠密矩阵,稠密矩阵占用的空间是固定的,约为12KB字节。

通过 hyperLoglog 数据类型,你可以利用 pfadd 向基数统计中增加新的元素,可以用 pfcount 获得 hyperLogLog 结构中存储的近似基数数量,还可以用 hypermerge 将多个 hyperLogLog 合并为一个 hyperLogLog 结构,从而可以方便的获取合并后的基数数量。

hyperLogLog 的特点是统计过程不记录独立元素,占用内存非常少,非常适合统计海量数据。在大中型系统中,统计每日、每月的 UV 即独立访客数,或者统计海量用户搜索的独立词条数,都可以用 hyperLogLog 数据类型来进行处理。

Redis常见的数据类型相关推荐

  1. Redis常见数据类型_Redis通用指令

    Redis常见数据类型 redis本身就是一个Map结构, 所有数据都采用key:value的形式, redis中的数据类型指的是value的类型, key部分永远是字符串 string(类似Java ...

  2. redis五种数据类型及其常见操作

    redis五种数据类型及其常见操作 Redis支持5种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 1.strin ...

  3. 【带你重拾Redis】Redis常见知识点

    什么是Redis? Redis是一个使用ANSI C语言编写,遵守BSD协议规范的开源的K-V类型的NoSQL数据库服务器. Redis是当前最流行的K-V类型的NoSQL数据库之一,在通往系统架构的 ...

  4. Redis:常见的面试题

    Redis的那些最常见面试问题 先把这些面试题给浏览一遍,大概知道redis的一些相关名词,接下来几篇博客才会继续的详细一些写redis的一些特性~~然后慢慢把redis学会. 1.什么是Redis? ...

  5. Redis 有哪些数据类型?

    Redis 的数据类型可谓是 Redis 的精华所在,同样的数据类型,例如字符串存储不同的值对应的实际存储结构也是不同,当你存储的 int 值是实际的存储结构也是 int,如果是短字符串(小于 44 ...

  6. Redis五种数据类型及应用场景

    Redis五种数据类型及应用场景 MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样 ...

  7. Redis:二、Redis常见命令

    2. Redis常见命令 2.1 Redis数据结构介绍 Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样 Redis为了方便我们学习,将操作不同 ...

  8. 2 万字 + 20张图| 细说 Redis 九种数据类型和应用场景

    作者:小林coding 计算机八股文网(操作系统.计算机网络.计算机组成.MySQL.Redis):https://xiaolincoding.com 大家好,我是小林. 我们都知道 Redis 提供 ...

  9. 【2020尚硅谷Java大厂面试题第三季 04】Redis 9种数据类型使用场景,分布式锁演变步骤,lua脚本,redis事务,Redisson,Redis内存占用,删除策略,内存淘汰策略,手写LRU

    1.安装redis6.0.8 2023 02 02 为:redis-7.0.8.tar.gz 2.redis传统五大数据类型的落地应用 3.知道分布式锁吗?有哪些实现方案?你谈谈对redis分布式锁的 ...

最新文章

  1. 百度前端技术学院Task20 笔记
  2. java只有高跟很高_女明星们为了合影不输,练就踩高跷本领,鞋跟一个比一个高!...
  3. yolo算法的优缺点分析_yolo算法介绍
  4. 利用导航网格限制玩家移动范围
  5. Mysql语句改成Oracle语句的区别
  6. JAVA 仿QQ聊天程序
  7. matlab实现卷积编码'适合小白理解学习'
  8. K8S 三种探针 readinessProbe、livenessProbe和startupProbe
  9. 华为手机默认浏览器打开应用宝链接直接启动应用问题解决
  10. 一键steam挂卡linux,steam游戏挂卡工具(ArchiSteamFarm)
  11. android edittext 下划线没了,关于android:如何在EditText中隐藏下划线
  12. 五笔打字 五笔练习 86编码 字根 五笔字典 拆字 图解
  13. linux防火墙之firewalld
  14. L1-002打印沙漏C语言,沙漏
  15. .\Obj\Template.axf: error: L6002U: Could not open file .\obj\core_cm3.o: No such file or directory
  16. DOM之parentNode与offsetParent
  17. #今日论文推荐# 陈天奇、王威廉等人推荐:ACL最佳论文奖得主给新入行研究者的一点建议
  18. STM32F0系列出现overrun interrupt 和PB6 PB7映射的解决办法
  19. html中相对位置与绝对位置
  20. SQL中的等号(=)、IN、LIKE三者的比较

热门文章

  1. Kiss the Rain -- 地表雨水动态效果 (Dynamic rain and its effects)
  2. 多台电脑的hexo博客同步实现
  3. Linux服务器中将csv、txt文件导入、导出mysql数据库
  4. 剪辑技巧,将视频放在另一个视频画面上同时播放
  5. ice storm暴风雪加盟_在暴风雪里玩命逃生!《Storm VR》上架Steam
  6. php 可以设置发任何邮件吗,PHP发邮件的配置
  7. 惠普(hp)电脑的一般拆分步骤(以清理灰尘为目标)
  8. 家装---防水篇 (防水涂料购买)
  9. EZ-Cube驱动安装及拨码设置
  10. 知云界面怎么调?知云只翻译一句话怎么办?详解方案出炉