应用场景

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的学习之路的更多相关文章

  1. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  2. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  3. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  4. Redis学习之路(000)- 目录

    本文是博主学习整理网上大神的文件以及自学的心得. Redis学习之路(000)- 目录 Redis学习之路(001)- Redis介绍以及安装(Linux) Redis学习之路(002)- Ubunt ...

  5. FastAPI 学习之路(五十六)将token存放在redis

    在之前的文章中,FastAPI 学习之路(二十九)使用(哈希)密码和 JWT Bearer 令牌的 OAuth2,FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2,Fa ...

  6. FastAPI 学习之路(五十五)操作Redis

    之前我们分享了操作关系型数据库,具体文章, FastAPI 学习之路(三十二)创建数据库 FastAPI 学习之路(三十三)操作数据库 FastAPI 学习之路(三十四)数据库多表操作 这次我们分享的 ...

  7. 中小研发团队架构实践之生产环境诊断工具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如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...

  8. Go语言学习之路

    我关于Go语言的博客原本发布于我的个人网站:wwww.liwenzhouu.com.但是被某些人抄怕了,没办法只好搬运到博客园. 我的Go语言学习之路 2015年底我因为工作原因接触到了Go语言,那时 ...

  9. 【SpringCloud之pigx框架学习之路 】2.部署环境

    [SpringCloud之pigx框架学习之路 ]1.基础环境安装 [SpringCloud之pigx框架学习之路 ]2.部署环境 1.下载代码 git clone https://git.pig4c ...

随机推荐

  1. MySQL导出数据库和导入数据库

    一.导出: 语法:mysqldump --default-character-set=utf8 -u用户名 -p密码 数据库名 -d --add-drop-table > 导出文件名.sql 注 ...

  2. C#中使用设置(Settings.settings) Properties.Settings.Default .(配置文件相当重要)

    C#中使用设置(Settings.settings) Properties.Settings.Default . 2016年08月04日 15:02:43 zxd9790902 阅读数:10664更多 ...

  3. phpstudy后门漏洞复现php5.2

    前段时间phpstudy被人发现某些版本存在后门,许多人就这样被当作肉鸡长达两年之久 后门隐藏在程序自带的php的php_xmlrpc.dll模块 影响的版本:phpstudy2016和2018 在H ...

  4. Unity 打开其他exe文件

    using UnityEngine; using System.Collections; using System.Diagnostics;///// public class FeiYuZhu : ...

  5. 《ES6标准入门》(阮一峰)--11.对象的新增方法

    1.Object.is() ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===).它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0.J ...

  6. HDU - 6198 number number number(规律+矩阵快速幂)

    题意:已知F0 = 0,F1 = 1,Fn = Fn - 1 + Fn - 2(n >= 2), 且若n=Fa1+Fa2+...+Fak where 0≤a1≤a2≤⋯≤a,n为正数,则n为mj ...

  7. uni-app解决小程序圆角样式不生效

    在使用uni-app实现小程序的时候,设置左图的右圆角不生效,样式也都没有问题,在模拟器上也可以正常现实,手机上样式出现差别,现有以下解决方法: 设置整个圆角,然后左边使用margin-left:-3 ...

  8. POJ 3614:Sunscreen 贪心+优先队列

    Sunscreen Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5378   Accepted: 1864 Descrip ...

  9. Python3中的bytes和str类型

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...

  10. 指令——free

    free指令 一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个. free指令作用:查看内存使用情 ...