应用场景

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. http协议请求报文与响应报文分析

    什么是HTTP协议: HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到 不断地完善和扩展.目前在WWW中使用 ...

  2. R 正态性检验:正态概率图

    检验模型是否满足正态性假设的方法: 1.正态概率图 这是我编写的画正态概率图的函数: #绘制正态概率图 plot_ZP = function(ti) #输入外部学生化残差 { n = length(t ...

  3. java实现下划线转驼峰

    废话少说,直接上代码 import java.util.regex.Matcher; import java.util.regex.Pattern; public class Temp { publi ...

  4. uboot源码分析2-启动第二阶段

    一.背景知识 1.uboot第二阶段应该做什么? 概括来讲uboot第一阶段主要就是初始化了SoC内部的一些部件(譬如看门狗.时钟),然后初始化DDR并且完成重定位. 由宏观分析来讲,uboot的第二 ...

  5. 树莓派—raspbian软件源

    零.一键换源 2018.05.18更新:新的默认源为raspbian.raspberrypi.org 因此一键换源相应改为 sudo sed -i 's#://raspbian.raspberrypi ...

  6. NIO三大组件简介

    NIO简介 NIO 是面向缓冲区(或者说面向块)编程的, 因为Buffer底层本质上就是内存块.数据被读取到一个缓冲区, 稍后再被它处理, 需要时数据可在缓冲区前后移动, 从而增加了处理过程中的灵活性 ...

  7. ACM-吴奶奶买鱼

    题目描述:吴奶奶买鱼   吴奶奶有个可爱的外孙女——琪琪,她很喜欢小动物,尤其喜欢养鱼.为了让小孙女养到漂亮的小鱼,吴奶奶一大早就到花鸟鱼虫市场买鱼.这个市场可真大,里面有各种各样的宠物,就连宠物鱼都 ...

  8. POJ 3692:Kindergarten 求补图的最大点独立集 头一次接触这样的做法

    Kindergarten Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5884   Accepted: 2877 Desc ...

  9. 官网英文版学习——RabbitMQ学习笔记(四)Work queues

    工作队列:把每个任务只发送给一个工作者. 上一篇我们是从一个指定的队列发送接收消息,在本文中,我们将创建一个工作队列,用于在多个工作者之间分配耗时的任务. 工作队列(即任务队列)背后的主要思想是避免立 ...

  10. Vue - 项目配置 ( element , 安装路由 , 创建路由 )

    1,安装element     :      vue add element 2,安装路由          :     vue add router 3,创建路由的过程  :   (1) 新建 vu ...