2022/08/04、05 day01-2/02:Redis数据类型
文章目录
- 今日内容
- 数据存储类型介绍
- string
- **Redis数据存储格式**
- **string类型**
- **string类型数据的基本操作**
- **string类型数据的扩展操作**
- **string类型数据操作的注意事项**
- **string类型应用场景**
- **key的设置约定**
- hash
- list
今日内容
常用的数据类型一共有一下5种:
- string
- hash
- list
- set
- sorted_set
- 数据类型实践案例
数据存储类型介绍
业务数据的特殊性
- 作为缓冲使用
- 原始业务功能设计
- 秒杀
- 京东618活动
- 天猫双11活动
- 火车排队购票
- 运营平台监控到的突发高频访问数据
- 突发时政要闻,被强势关注围观
- 高频、复杂的统计数据
- 在线人数
- 投票排行榜
- 附加功能
- 系统功能优化或升级
- 单服务器升级集群
- Session管理
- Token管理
Redis数据类型(5种常用)
- string
- hash
- list
- set
- sorted_set
string
Redis数据存储格式
- Redis自身是一个Map,其中所有的数据都是采用key:value的形式存储
- 数据类型指的是存储的数据的类型,也就是value部分的类型,key部分永远都是字符串
string类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2NBOyzvI-1659702772759)(en-resource://database/4938:1)]
- 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
- 存储数据的格式:一个存储空间保存一个数据
- 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用,但其本质还是字符串
string类型数据的基本操作
- 添加/修改数据:set key value
- 添加/修改多个数据:mset key1 value1 key2 value2…
- 追加信息到原始信息后部(如果原始信息存在就追加,否则新建):append key value
- 获取数据:get key
- 获取多个数据:mget key1 key2…
- 获取数据字符个数(字符串长度):strlen key
- 删除数据:del key
- (integer) 0 代表失败
- (integer) 1 代表成功
string类型数据的扩展操作
业务场景
大型企业级应用中,分表操作是基本操作,使用多张表存储同类型数据,但是对应的主键id必须保证统一性,不能重复。Oracle数据库具有sequence设定,可以解决该问题,但是MySQL数据库并不具有类似的机制,那么该如何解决呢?
解决方案:
- 设置数值数据增加指定范围的值
- incr key 如果是数值,则给value做增操作,每次增加1个单位
- incrby key increment 增加指定的整数的值(可以为负数)
- incrbyfloat key increment 增加指定的小数的值
- 设置数值数据减少指定范围的值
- decr key 如果是数值,则给value做减操作,每次减少1个单位
- decrby key increment 减少指定的整数的值(可以为负数)
string作为数值操作
- string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。
- redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
- 注意:按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错。
9223372036854775807(java中long型数据最大值,Long.MAX_VALUE)
Tips 1:
- redis用于控制数据库表主键id,为数据库表主键提供生成策略,保障数据库表的主键唯一性
- 此方案适用于所有数据库,且支持数据库集群
业务场景
- “最强女生”启动海选投票,只能通过微信投票,每个微信号每 4 小时只能投1票。
- 电商商家开启热门商品推荐,热门商品不能一直处于热门期,每种商品热门期维持3天,3天后自动取消热门。
- 新闻网站会出现热点新闻,热点新闻最大的特征是时效性,如何自动控制热点新闻的时效性。
解决方案
- 设置数据具有指定的生命周期
- setx key seconds value 秒
- 例如:setex tel 10 1 当10s到达后,tel就失效为空了(没有了)
- 例如:set tel 2 此命令已经更新,上面的语句已经没有用了
- psetex key milliseconds value 毫秒
- 例如:psetex tel 9999 1
- setx key seconds value 秒
Tips 2:
redis 控制数据的生命周期,通过数据是否失效控制业务行为,适用于所有具有时效性限定控制的操作
string类型数据操作的注意事项
- 数据操作不成功的反馈与数据正常操作之间的差异
- 表示运行结果是否成功
- (integer) 0 -> false 失败
- (integer) 1 -> true 成功
- 表示运行结果值
- (integer) 3 -> 3 3个
- (integer) 1 -> 1 1个
- 数据为获取到
- (nil) 等同于null 不存在
- 数据最大存储量
- 512MB
- 数值计算最大范围(java中的long的最大值)
- ±9223372036854775807
- 表示运行结果是否成功
string类型应用场景
业务场景
- 主页高频访问信息显示控制。
- 例如新浪微博大V主页显示粉丝数与微博数量
解决方案
- 在Redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可。
- eg: user
2022/08/04、05 day01-2/02:Redis数据类型相关推荐
- 【跃迁之路】【545天】程序员高效学习方法论探索系列(实验阶段302-2018.08.04)...
@(跃迁之路)专栏 [跃迁之路]奖励金计划正式开始 从2018.7.1起,[跃迁之路]奖励金计划正式起航,从今以后,每月1日,我会将自己个人上月收入的1%计入[跃迁之路]奖励金池,积累到足够金额后,将 ...
- 【R】【课程笔记】04+05 数据预处理+收益率计算
本文是课程<数据科学与金融计算>第4-5章的学习笔记,主要介绍金融数据处理.收益率计算和R与C++调用,用于知识点总结和代码练习,Q&A为问题及解决方案. 往期回顾: 博文 内容 ...
- Golang神奇的2006-01-02 15:04:05
原文地址: https://www.jianshu.com/p/c7f7fbb16932 热身 在讲这个问题之前,先来看一道代码题: package mainimport ("fmt&quo ...
- 数学建模学习视频及资料集(2022.08.10)
2021高中数学建模(应用)能力展示活动细则详解(上) 2021高中数学建模(应用)能力展示活动细则详解(上)_哔哩哔哩_bilibili 2021高中数学建模(应用)能力展示活动细则详解(下) 20 ...
- 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 ...
- 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 ...
- 【2022.09.04】关于升级打怪学编程活动的通知
把电子学会全国青少年软件编程等级考试作为游戏的关卡,带着小朋友们升级打怪. 升级打怪计划 每周日晚20:00,我在腾讯会议中进行直播答疑,解决小朋友们本周遇到的编程问题,辅助小朋友们提升编程的技能. ...
- Go 的时间格式化为什么是 2006-01-02 15:04:05?
阅读本文大概需要 5 分钟. 大家好,我是 polarisxu. 没有什么是完美的!而且,有些东西,有些人认为好,有些人认为很糟糕.Go 也是如此.喜欢 Go 语言的朋友,大概率对其中某些地方不喜欢. ...
- 新手C#string类常用函数的学习2018.08.04
ToLower()用于将字符串变为小写,注意字符串的不可变特性,需要重新赋值给另一个字符串变量. s = s.ToLower();//字符串具有不可变性,转换后需要重新赋值,不可仅有s.ToLower ...
最新文章
- Python基础学习笔记--字符串、列表
- Excel表格数据导入到SQLServer数据库
- c# 定位内存快速增长_CTF丨Linux Pwn入门教程:针对函数重定位流程的相关测试(下)...
- c语言程序定义不知数量的一维数组,c语言程序设计10-第6章 利用数组处理批量数据 6.1 怎样定义和引用一维数组.ppt...
- Mybatis的复习
- pytorch-alexnet-推理
- 高级着色语言HLSL入门(5)
- 【新番尝鲜】玛利亚狂热--百合VS伪娘之战
- csu 1577 Dice Game (博弈)
- [CSS]关于Flexbox
- html鼠标自动点击代码,网上学习鼠标10分钟自动点击 按键精灵使用设置方法 脚本编辑...
- ef1a启动子_组织特异性启动子的筛选方法
- Windows窗体之ShowWindow函数分析
- 让你的nginx支持分布式追踪opentracing
- 计算机科学中atm是什么,计算机专业知识:ATM网络基本原理
- linux 下 调笔记本亮度,Linux下如何保存笔记本屏幕亮度设置(背光亮度)
- VUE页面背景设置为视频
- Python利用paddlehub实现批量抠图和更换证件照背景底色
- Direct3D中的纹理映射
- 超声波模块c语言编程,超声波模块
热门文章
- 鸿蒙HarmonyOS版抖音(含源码)
- 【三维目标检测】3DSSD(一)
- 超赞,52个数据可视化图表鉴赏!
- 解决MySQL报错ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)
- mysql .zip 包简易安装
- C语言的/t到底有什么用
- 模块:导入和使用标准模块,第三方模块
- App内购项目的App Store推广
- UVALive 4126 Password Suspects(AC自动机+dp)
- 机房管理系列(1) 联想保护系统EDU7.5在同传CMOS参数后奔溃的解决办法
- 【跃迁之路】【545天】程序员高效学习方法论探索系列(实验阶段302-2018.08.04)...
- eg: user