文章目录

  • 今日内容
  • 数据存储类型介绍
  • string
    • **Redis数据存储格式**
    • **string类型**
    • **string类型数据的基本操作**
    • **string类型数据的扩展操作**
    • **string类型数据操作的注意事项**
    • **string类型应用场景**
    • **key的设置约定**
  • hash
  • list

今日内容

常用的数据类型一共有一下5种:

  1. string
  2. hash
  3. list
  4. set
  5. sorted_set
  6. 数据类型实践案例

数据存储类型介绍

业务数据的特殊性

  • 作为缓冲使用
  1. 原始业务功能设计

    1. 秒杀
    2. 京东618活动
    3. 天猫双11活动
    4. 火车排队购票
  2. 运营平台监控到的突发高频访问数据
    1. 突发时政要闻,被强势关注围观
  3. 高频、复杂的统计数据
    1. 在线人数
    2. 投票排行榜
  • 附加功能
  1. 系统功能优化或升级

    1. 单服务器升级集群
    2. Session管理
    3. Token管理

Redis数据类型(5种常用)

  1. string
  2. hash
  3. list
  4. set
  5. sorted_set

string

Redis数据存储格式

  1. Redis自身是一个Map,其中所有的数据都是采用key:value的形式存储
  2. 数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串

string类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2NBOyzvI-1659702772759)(en-resource://database/4938:1)]

  1. 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
  2. 存储数据的格式:一个存储空间保存一个数据
  3. 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用,但其本质还是字符串

string类型数据的基本操作

  1. 添加/修改数据:set key value

    1. 添加/修改多个数据:mset key1 value1 key2 value2…
    2. 追加信息到原始信息后部(如果原始信息存在就追加,否则新建):append key value
  2. 获取数据:get key
    1. 获取多个数据:mget key1 key2…
    2. 获取数据字符个数(字符串长度):strlen key
  3. 删除数据:del key
    1. (integer) 0 代表失败
    2. (integer) 1 代表成功

string类型数据的扩展操作

业务场景
大型企业级应用中,分表操作是基本操作,使用多张表存储同类型数据,但是对应的主键id必须保证统一性,不能重复。Oracle数据库具有sequence设定,可以解决该问题,但是MySQL数据库并不具有类似的机制,那么该如何解决呢?

解决方案:

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

    1. incr key 如果是数值,则给value做增操作,每次增加1个单位
    2. incrby key increment 增加指定的整数的值(可以为负数)
    3. incrbyfloat key increment 增加指定的小数的值
  2. 设置数值数据减少指定范围的值
    1. decr key 如果是数值,则给value做减操作,每次减少1个单位
    2. decrby key increment 减少指定的整数的值(可以为负数)

string作为数值操作

  1. string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。
  2. redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
  3. 注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。
    9223372036854775807(java中long型数据最大值,Long.MAX_VALUE)

Tips 1:

  1. redis用于控制数据库表主键id,为数据库表主键提供生成策略,保障数据库表的主键唯一性
  2. 此方案适用于所有数据库,且支持数据库集群

业务场景

  • “最强女生”启动海选投票,只能通过微信投票,每个微信号每 4 小时只能投1票。
  • 电商商家开启热门商品推荐,热门商品不能一直处于热门期,每种商品热门期维持3天,3天后自动取消热门。
  • 新闻网站会出现热点新闻,热点新闻最大的特征是时效性,如何自动控制热点新闻的时效性。

解决方案

  1. 设置数据具有指定的生命周期

    1. setx key seconds value 秒

      1. 例如:setex tel 10 1 当10s到达后,tel就失效为空了(没有了)
      2. 例如:set tel 2 此命令已经更新,上面的语句已经没有用了
    2. psetex key milliseconds value 毫秒
      1. 例如:psetex tel 9999 1

Tips 2:
redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作

string类型数据操作的注意事项

  1. 数据操作不成功的反馈与数据正常操作之间的差异

    1. 表示运行结果是否成功

      1. (integer) 0 -> false 失败
      2. (integer) 1 -> true 成功
    2. 表示运行结果值
      1. (integer) 3 -> 3 3个
      2. (integer) 1 -> 1 1个
    3. 数据为获取到
      1. (nil) 等同于null 不存在
      2. 数据最大存储量
        • 512MB
    4. 数值计算最大范围(java中的long的最大值)
      • ±9223372036854775807

string类型应用场景

业务场景

  1. 主页高频访问信息显示控制。

    1. 例如新浪微博大V主页显示粉丝数与微博数量

解决方案

  1. 在Redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可。

    1. eg: user

      2022/08/04、05 day01-2/02:Redis数据类型相关推荐

      1. 【跃迁之路】【545天】程序员高效学习方法论探索系列(实验阶段302-2018.08.04)...

        @(跃迁之路)专栏 [跃迁之路]奖励金计划正式开始 从2018.7.1起,[跃迁之路]奖励金计划正式起航,从今以后,每月1日,我会将自己个人上月收入的1%计入[跃迁之路]奖励金池,积累到足够金额后,将 ...

      2. 【R】【课程笔记】04+05 数据预处理+收益率计算

        本文是课程<数据科学与金融计算>第4-5章的学习笔记,主要介绍金融数据处理.收益率计算和R与C++调用,用于知识点总结和代码练习,Q&A为问题及解决方案. 往期回顾: 博文 内容 ...

      3. Golang神奇的2006-01-02 15:04:05

        原文地址: https://www.jianshu.com/p/c7f7fbb16932 热身 在讲这个问题之前,先来看一道代码题: package mainimport ("fmt&quo ...

      4. 数学建模学习视频及资料集(2022.08.10)

        2021高中数学建模(应用)能力展示活动细则详解(上) 2021高中数学建模(应用)能力展示活动细则详解(上)_哔哩哔哩_bilibili 2021高中数学建模(应用)能力展示活动细则详解(下) 20 ...

      5. Go 中 time.Parse 报错:year/month/day hour/minute/second out of range 时间格式化为什么是 2006-01-02 15:04:05?

        1. 问题现象 在使用 Go 语言的 time.Parse 解析时间时遇到以下错误: func main() {timeParse, err := time.Parse("2006-11-0 ...

      6. golangci-lint 自定义linter核心代码 用于检查错误使用gtime.Time.Format() 例如gtime.Time.Format(“2006-01-02 15:04:05“)

        gtime.Time对象通过Format方法来实现自定义格式的时间日期转换,该方法与标准库time.Time的Format方法冲突.在gtime.Time对象中,通过Layout方法实现标准库time ...

      7. 【2022.09.04】关于升级打怪学编程活动的通知

        把电子学会全国青少年软件编程等级考试作为游戏的关卡,带着小朋友们升级打怪. 升级打怪计划 每周日晚20:00,我在腾讯会议中进行直播答疑,解决小朋友们本周遇到的编程问题,辅助小朋友们提升编程的技能. ...

      8. Go 的时间格式化为什么是 2006-01-02 15:04:05?

        阅读本文大概需要 5 分钟. 大家好,我是 polarisxu. 没有什么是完美的!而且,有些东西,有些人认为好,有些人认为很糟糕.Go 也是如此.喜欢 Go 语言的朋友,大概率对其中某些地方不喜欢. ...

      9. 新手C#string类常用函数的学习2018.08.04

        ToLower()用于将字符串变为小写,注意字符串的不可变特性,需要重新赋值给另一个字符串变量. s = s.ToLower();//字符串具有不可变性,转换后需要重新赋值,不可仅有s.ToLower ...

      最新文章

      1. Python基础学习笔记--字符串、列表
      2. Excel表格数据导入到SQLServer数据库
      3. c# 定位内存快速增长_CTF丨Linux Pwn入门教程:针对函数重定位流程的相关测试(下)...
      4. c语言程序定义不知数量的一维数组,c语言程序设计10-第6章 利用数组处理批量数据 6.1 怎样定义和引用一维数组.ppt...
      5. Mybatis的复习
      6. pytorch-alexnet-推理
      7. 高级着色语言HLSL入门(5)
      8. 【新番尝鲜】玛利亚狂热--百合VS伪娘之战
      9. csu 1577 Dice Game (博弈)
      10. [CSS]关于Flexbox
      11. html鼠标自动点击代码,网上学习鼠标10分钟自动点击 按键精灵使用设置方法 脚本编辑...
      12. ef1a启动子_组织特异性启动子的筛选方法
      13. Windows窗体之ShowWindow函数分析
      14. 让你的nginx支持分布式追踪opentracing
      15. 计算机科学中atm是什么,计算机专业知识:ATM网络基本原理
      16. linux 下 调笔记本亮度,Linux下如何保存笔记本屏幕亮度设置(背光亮度)
      17. VUE页面背景设置为视频
      18. Python利用paddlehub实现批量抠图和更换证件照背景底色
      19. Direct3D中的纹理映射
      20. 超声波模块c语言编程,超声波模块

      热门文章

      1. 鸿蒙HarmonyOS版抖音(含源码)
      2. 【三维目标检测】3DSSD(一)
      3. 超赞,52个数据可视化图表鉴赏!
      4. 解决MySQL报错ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)
      5. mysql .zip 包简易安装
      6. C语言的/t到底有什么用
      7. 模块:导入和使用标准模块,第三方模块
      8. App内购项目的App Store推广
      9. UVALive 4126 Password Suspects(AC自动机+dp)
      10. 机房管理系列(1) 联想保护系统EDU7.5在同传CMOS参数后奔溃的解决办法