应用场景

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. 实验吧——Recursive

    环境:win10,kali虚拟机 工具:ida 虚拟机打开看看,发现是ELF文件,运行一下,额没有什么发现. Ida打开看看,发现是在文件内部运行python解释器,百度搜索了一个基本上可以找到Py_ ...

  2. 剑指offer 链表中环的入口位置

    题目描述 一个链表中包含环,请找出该链表的环的入口结点.   思路:这题需要知道a = c,然后head和slow每次走一步,相遇的时候就是第一个入口交点, 注意:for循环或者while循环之后,一 ...

  3. 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 ...

  4. NirSoft 实用程序

    64-bit (x64) utilities package 此软件包包含NirSoft中的所有实用程序,这些实用程序具有64位版本(x64)Windows的独立构建. 此程序包包含下面列表中每个实用 ...

  5. JSONObject 和JSONArray基本使用

    1. 打包 JSONObject jsonObject = new JSONObject(); jsonObject.put("code", "200"); j ...

  6. POJ1723 SOLDIERS 兄弟连

    SOLDIERS 有一个性质:在一个长为n的序列a中找一个数 \(a_k\) 使得 \(\sum\limits_{i=1}^n abs(a_i-a_k)\) 最小,则 \(a_k\) 是a的中位数. ...

  7. POJ 2142:The Balance

    The Balance Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4781   Accepted: 2092 Descr ...

  8. dede开启会员功能

    登陆后台,找到菜单里面的系统基本参数设置>会员设置>开启会员功能,选择“是”,保存即可

  9. 指令——rm

    一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个. 指令:rm (remove,移除.删除) 作用 ...

  10. maven爬坑

    版本问题 maven源的问题 找不到的jar包 http://www.cnblogs.com/geektown/p/5705405.html http://blog.csdn.net/beyondlp ...