Redis的学习之路
应用场景
1.作为缓存使用
(1)原始业务功能设计
- 秒杀
- 双十一、618
- 排队购票
(2)运营平台察觉到突发式高频访问热点
- 突发式热点新闻
(3)高频复杂的统计数据
- 在线直播
- 投票排行榜
2.附加功能
(1)系统功能优化或升级
- 单服务器升级集群
- Session管理
- Token管理
主要内容
一、常用的5种数据存储类型
- String --类比Java中的String
- hash --类比Java中的HashMap
- list --类比Java中的LinkedList
- set --类比Java中的HashSet
- sorted_set --类比Java中的TreeSet
1.数据存储类型String基本操作-单指令与多指令
Redis自身是一个Map,其中所有的数据都是采用key:value形式来存储。
key永远都是字符串,而这里所涉及的数据存储类型指的都是value。
- 存储的数据:单个数据,最简单的数据存储类型,也是最常用的。
- 存储格式:一个存储空间保存一个数据。
- 存储内容:通常使用字符串,如果字符串以整数形式展示,可以作为数字操作使用,但其本质上还是字符串。
(1)添加/修改数据
set key value
(2)获取数据
get key
(3)删除数据
delete key
这里需要注意的是Redis删除成功的时候这里返回值为(Integer) 1,删除失败返回值为(Integer)0 。
(4)添加/修改多个数据
mset key1 value1 key2 value2 key3 value3 ...
(5)获取多个数据
mget key1 key2 key3...
(6)获取数据字符个数(字符串长度)
strlen key
(7)追加信息到原始信息后部(如果存在则拼接在后部,不存在则新建)
append key value
(8)这里单独提一下set 和mset的区别,执行效率上,举一个例子:如果我想执行三条set命令,分别要进行发送、执行、返回结果的过程,假设发送指令和返回结果指令所需时间都是s,这两个过程各自需要三次,执行命令所需时间为x,需要三次,那么总时间需要6s+3x。那么多指令执行mset,发送指令需要一次,执行需要三次,返回结果需要一次,那么总时间就是2s+3x。好像多指令mset在多个set值的时候效率高于set,其实这是要结合实际情况来决定发送方法,如果要发50条指令,用mset比较合适,如果要发1亿条指令呢,mset的数据量会很庞大,单线程阻塞了,所有人都等它执行完,反而起到反作用。因此,我们在实际数据量大的时候可以对数据进行适当的切割。
2.数据存储类型String扩展操作-数据增减操作
业务场景:大型企业级应用中,分表操作是基本操作,使用多张表存储同类型数据,但是对应的主键id必须保证统一性,不能重复,Oracle数据库具有sequence设定,可以解决该问题,但是MySQL数据库并不存在类似的机制,那么该如何解决呢?
这里就要介绍一下Redis中的一些指令来代替。
解决方案:
- 设置数值数据增加指定范围的值
incr key
incrby key increment
incrbyfloat key increment
(1)incr用法:
(2)incrby key increment:指定增加的步长
(3)incrbyfloat key increment:指定增长的小数
- 设置数值数据减少指定范围的值
decr key
decrby key increment
(4)decr用法:
(5)decrby key increment:指定减少的步长
这里补充一下:incrby和decrby后面的increment的数可以为正,可以为负,也就是说incrby后如果步长是负数,则可以做到减的效果。
String作为数值操作
- String在Redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算。
- Redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响。
- 注意:按数值进行操作的数据,如果原始数据不能转成数值,或者超过了Redis数值上限范围,将报错。(9223372036854775807:java中Long型数据最大值,Long.MAX_VALUE)
3.数据时效性设置
业务场景
- 海选微信投票,每个微信号每6个小时只能投一票
- 电商商家开启热门商品推荐,每个商品拥有3天热门推荐时间,3天后取消热门
- 热点新闻有时效性,控制新闻的时效性
Redis提供以下指令:
- 设置数据具有指定的生命周期
setex key seconds value
psetex key milliseconds value
用法:
下面的毫秒指令与此相似,不做演示。
4.string类型使用注意事项与key的命名规范
(1)注意事项
- 数据操作不成功的反馈与数据正常操作之间的差异
a.表示运行结果是否成功
(integer)0 ---> false 失败
(integer)1 ---> true 成功
b.表示运行结果值
(integer)3 --->3 3个
(integer)1 --->1 1个
- 数据未获取到
(nil)等同于null
- 数据最大存储量
512MB
- 数值计算最大范围(java中long的最大值)
9223372036854775807
(2)String类型的业务场景
主页高频访问信息显示控制,例如新浪微博大V主页显示粉丝数和微博数量
这里的原因是任何人点进这个微博大V主页,都必定会显示粉丝数、微博数量、关注量。
命令规范1
这里举个栗子:表名:主键:主键值:属性名
key--->user:id:1001:fans
value--->1221
命名规范2
如果是json格式将一整个对象传入value呢?
再举个栗子:表名:主键:主键值
key--->user:id:1001
value--->{id:1001,blogs:789,fans:1221}
待续。。。。
Redis的学习之路的更多相关文章
- Redis——学习之路四(初识主从配置)
首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...
- Redis——学习之路三(初识redis config配置)
我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. ...
- Redis——学习之路二(初识redis服务器命令)
上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息 s ...
- Redis学习之路(000)- 目录
本文是博主学习整理网上大神的文件以及自学的心得. Redis学习之路(000)- 目录 Redis学习之路(001)- Redis介绍以及安装(Linux) Redis学习之路(002)- Ubunt ...
- FastAPI 学习之路(五十六)将token存放在redis
在之前的文章中,FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2,FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2,Fa ...
- FastAPI 学习之路(五十五)操作Redis
之前我们分享了操作关系型数据库,具体文章, FastAPI 学习之路(三十二)创建数据库 FastAPI 学习之路(三十三)操作数据库 FastAPI 学习之路(三十四)数据库多表操作 这次我们分享的 ...
- 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问
中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...
- Go语言学习之路
我关于Go语言的博客原本发布于我的个人网站:wwww.liwenzhouu.com.但是被某些人抄怕了,没办法只好搬运到博客园. 我的Go语言学习之路 2015年底我因为工作原因接触到了Go语言,那时 ...
- 【SpringCloud之pigx框架学习之路 】2.部署环境
[SpringCloud之pigx框架学习之路 ]1.基础环境安装 [SpringCloud之pigx框架学习之路 ]2.部署环境 1.下载代码 git clone https://git.pig4c ...
随机推荐
- CentOS 7 搭建本地YUM仓库,并定期同步阿里云源
目录导航: 1. 系统环境 2. 修改yum 源为阿里云源 3. 安装yum相关的软件 4. 根据源标识同步源到本地目录 5. 安装nginx开启目录权限保证本地机器可以直接本地yum源 6. 客户端 ...
- bzoj 1138: [POI2009]Baj 最短回文路
额,,貌似网上的题解都说超时之类的. 然而我这个辣鸡在做的时候不知道在想什么,连超时的都不会. 超时的大概是这样的,f[x][y]表示x到y的最短回文路,然后更新的话就是 f[x][y]更新到 f[a ...
- [Codeforces #608 div2]1272B Blocks
Description There are nnn blocks arranged in a row and numbered from left to right, starting from on ...
- 用python实现在手机查看小姐姐的电脑在作什么!
看上心意的小姐姐,想看她平时都浏览什么网页,如何才能看她的桌面呢,都说Python很厉害,这次我们做一个利用移动端访问电脑来查看电脑的界面的神器!不知道大家以前有没有做过这方面的东西呢?也许大家听起来 ...
- 007.CI4框架CodeIgniter, 加载自己的helper辅助类,调用自己helper中定义各种全局函数
01. 我们在Helpers文件中创建一个Tx_helper.php的文件,里面就下一个函数 <?php //输出 function ShowMessage($AMsg) { echo &quo ...
- 解析underscore中的debounce
先奉上源码 取自Underscore.js 1.9.1的debounce _.debounce = function(func, wait, immediate) { var timeout, res ...
- dedecms 标签使用 runphp=php 获取文章静态地址
[field:id runphp='yes'] $url=GetOneArchive(@me); @me=$url['arcurl']; [/field:id]
- windows下修改pip安装源的办法
之前的随笔里有写过关于Mac OS和Linux的,现在需要用到Windows的系统, 修改方法:路径----> C:\Users\用户名\AppData\Roaming,在Roaming文件夹下 ...
- Windows下C++遍历文件夹中的文件
Windows下,在VS中开发,C++遍历文件夹下文件. 在Windows下,遍历文件所用到的函数和结构体,需要在程序中包含头文件#include <io.h>,在VS中,头文件io.h实 ...
- Nginx+uwsgi+django部署项目
nginx把请求转发给uwsgi,然后把uwsgi处理得到的结果返回给浏览器. 安装nginx: yum -y install gcc pcre-devel openssl-devel #安装Ngin ...