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 ...
随机推荐
- 实验吧——Recursive
环境:win10,kali虚拟机 工具:ida 虚拟机打开看看,发现是ELF文件,运行一下,额没有什么发现. Ida打开看看,发现是在文件内部运行python解释器,百度搜索了一个基本上可以找到Py_ ...
- 剑指offer 链表中环的入口位置
题目描述 一个链表中包含环,请找出该链表的环的入口结点. 思路:这题需要知道a = c,然后head和slow每次走一步,相遇的时候就是第一个入口交点, 注意:for循环或者while循环之后,一 ...
- php 文件缓存 include vs serialize vs json_encode
大神:http://techblog.procurios.nl/k/news/view/34972/14863/cache-a-large-array-json-serialize-or-var_ex ...
- NirSoft 实用程序
64-bit (x64) utilities package 此软件包包含NirSoft中的所有实用程序,这些实用程序具有64位版本(x64)Windows的独立构建. 此程序包包含下面列表中每个实用 ...
- JSONObject 和JSONArray基本使用
1. 打包 JSONObject jsonObject = new JSONObject(); jsonObject.put("code", "200"); j ...
- POJ1723 SOLDIERS 兄弟连
SOLDIERS 有一个性质:在一个长为n的序列a中找一个数 \(a_k\) 使得 \(\sum\limits_{i=1}^n abs(a_i-a_k)\) 最小,则 \(a_k\) 是a的中位数. ...
- POJ 2142:The Balance
The Balance Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4781 Accepted: 2092 Descr ...
- dede开启会员功能
登陆后台,找到菜单里面的系统基本参数设置>会员设置>开启会员功能,选择“是”,保存即可
- 指令——rm
一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个. 指令:rm (remove,移除.删除) 作用 ...
- maven爬坑
版本问题 maven源的问题 找不到的jar包 http://www.cnblogs.com/geektown/p/5705405.html http://blog.csdn.net/beyondlp ...