应用场景

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. 7个现在就该学习Python 的理由【80%的人都不知道】

    Python 是一门更注重可读性和效率的语言,尤其是相较于 Java,PHP 以及 C++ 这样的语言,它的这两个优势让其在开发者中大受欢迎. 诚然,它有点老了,但仍是 80 后啊 —— 至少没有 C ...

  2. css3的伪(伪类和伪元素)大合集

    本文讲css3的伪,不是讲它有多虚伪,而是说它的伪元素样式.不得不说以前虽知html伪元素,但很少用,后得知借助css3伪元素可以发挥极大的便利.故总结css3的伪如下: CSS中存在一些比较特殊的属 ...

  3. Netty的出现

    原生NIO存在的问题 NIO的类库和API复杂, 使用麻烦: 需要熟练掌握Selector.ServerSocketChannel.SocketChannel.ByteBuffer 等. 需要具备其他 ...

  4. Flume 1.9.0 的安装(比较简单, 操作也不像老版本那么繁琐了)

    之前已经完成了Hadoop集群.Hbase集群.Hive的搭建, 这次来安装一下flume-1.9.0 安装过程 将tar包上传并解压到指定目录, 并修改名称 tar -zxvf apache-flu ...

  5. NIO 与 零拷贝

    零拷贝介绍 零拷贝是网络编程的关键, 很多性能优化都需要零拷贝. 在 Java程序中, 常用的零拷贝方式有m(memory)map[内存映射] 和 sendFile.它们在OS中又是怎样的设计? NI ...

  6. Good Bye 2019

    A.Card Game 题目大意:两个人都有共有n张卡牌,每张卡牌上都有一个数xi,没有两张牌上的数相同,且xi不小于1不大于n.每次两个人选出一张牌来,牌上数字大的人赢得此局,如果谁最后手上拥有所有 ...

  7. ArcoLinux安装完成后的的配置

    ArcoLinux安装完成后的的配置 这可能是全网第一篇Arcolinux的教程 1. 更改源 修改/etc/pacman.d/mirrorlist 在最头上增加清华源 Server = https: ...

  8. 【pwnable.kr】cmd2

    这道题是上一个cmd1的升级版 ssh cmd2@pwnable.kr -p2222 (pw:mommy now I get what PATH environmentis for :)) 登录之后, ...

  9. php.laravel.middleware

    关于中间件,在php-laravel中的定义就是对请求的一个过滤,相当于JSP技术中的filter的存在.需要知道编写了一个中间件可以配置在三个地方(就目前5.7版本而言)让其发挥作用,具体需要看/a ...

  10. 从零开始学C++(0 简介)

    2020年,给自己定一个新目标————开始写技术博客,将之前所学的内容重新复习并整理成一系列的文章,一来可以让自己对这些基础知识更加熟悉,二来方便于以后的复习查阅. 以前自己都是以笔记的形式将知识点记 ...