文章目录

  • Redis简介
  • Redis常用命令
  • Redis五大数据类型
    • String
    • Hash
    • List
    • Set
    • ZSet
  • 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级

Redis简介

Redis(Remote Dictionary Server)远程字典服务,是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,可以用来做缓存,举个例子,当我们要从数据库查询数据的时候,我们可以首先通过Redis,如果Redis中存在,那么就直接读取Redis中的数据,如果不存在,再去数据库中查询,并把查询的结果放到Redis中,以方便下次直接访问,这样一来就减轻了数据库的压力,而且提高了查询效率,因为Redis数据是在内存中的,所以速度比数据库快。

Redis常用命令

  • 设置键值对
    set myKey abc
  • 获取键值对
    get myKey
  • 查看所有的key
    keys *
  • 删除key,可以删除多个
    del key [key ...]
  • 判断某个key是否存在
    exists key
  • 查看key剩余多久有效时间,-1代表永久,-2代表失效
    ttl key
  • 给key设置有效时间,单位是秒
    expire key seconds
  • 设置key为永久有效
    persist key
  • 查看符合条件的key,“*”代表所有,“?”代表一个字符
    keys pattern
  • 切换数据库,redis中默认有16个数据库,其下标是从0到15,默认是在0数据库中
    select index
  • 从当前数据库中随机返回一个key
    randomkey
  • 修改key的名称
    rename key newkey
  • 将当前数据库中的key移动到指定的数据库中
    move key db
  • 查看key的类型
    type key

Redis五大数据类型

String

String类型是Redis最基本的数据类型一个键最大能存储512MB

  • set用于给key设定值,如果key已经有值了set会复写旧值
    set key value
  • 获取指定key的值,如果key不存在返回nil,如果key存储的不是字符串类型,返回一个错误
    get key
  • 只有key不存在时设置key的值
    setnx key value
  • 获取指定key中的字符串的子字符串
    getrange key start end
  • 返回key所存储的字符串的长度
    strlen key
  • 将key中存储的数字值增加1,如果key不存在,那么key的值会被先初始化为0,然后加1
    incr key
  • 将指定的key自增自定义值
    incrby key increment
  • 将key中存储的数字值减1
    decr key
  • 将指定的key自减自定义值
    decrby key decrement

Hash

Hash特别适合存储对象也就是我们的JavaBean,每个hash可以存储2^32 - 1个键值对,可以看成是一个key和value的map容器

  • 为指定的key设定field/value,key可以理解为是数据库表中的一行数据,field可理解为是字段,value就是值
    hset key field value
  • 同时可以设置多个,对应hash表中的key
    hmset key field value[filed value ...]
  • 获取存储在hash中中的值,根据field获取value
    hget key field value
  • 获取当前key的多个field
    hmget key field value
  • 获取该hash表中所有字段
    hkeys key
  • 获取hash表中字段的数量
    hlen key
  • 获取该key对应的所有字段和值
    hgetall key
  • 删除一个或多个域(也就是我们数据库中的字段)
    hdel key field
  • 只有字段field不存在时,设置hash域的值
    hsetnx key field value
  • 为hash表中指定域的整数值加上增量increment
    hincrby key field increment
  • 查看hash表中指定的域是否存在
    hexists key field

List

Redis中List列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的头部或尾部,一个列表最多可以包含2^32 - 1个元素,其类似于Java中的LinkedList

  • 将一个或多个值插入到列表的头部,从左侧添加
    lpush key value1 [value2]
  • 将一个或多个值插入到列表的尾部,从右侧添加
    rpush key value1 [value2]
  • 遍历一个列表,从起始下标到中止下标,-1代表最后一个
    lrange key start stop
  • 获取列表的长度
    llen key
  • 通过索引获取列表元素的值
    lindex key index
  • 从左删除列表的第一个元素,返回被删元素的值
    lpop key
  • 从右删除列表的第一个元素
    rpop key
  • 移除并获取列表的第一个元素,如果列表中没有元素,会阻塞列表直到等待超时或者发现可弹出元素,单位是秒
    blpop key timeout
  • 移除并获取列表的最后一个元素,如果列表中没有元素,会阻塞列表直到等待超时或者发现可弹出元素
    brpop key timeout
  • 对列表进行修剪,只保留指定区间的元素
    ltrim key start stop
  • 通过索引设置指定元素的值
    lset key index value
  • 在指定元素前或后插入值
    linsert key before | after privot value
  • 将第一个列表中最后一个元素移除,并添加到第二个列表中第一个位置
    rpoplpush source destination
  • 将本列表的最后一个元素移动到第一个位置
    rpoplpush source destination

Set

Redis的Set是String类型的无序集合,集合成员是唯一的,不能重复,底层是intset和hashtable两种数据结构,intset我们可以理解为数组,该数组是有序的,查找时通过二分,hashtable就是普通的哈希表

  • 给指定集合添加值
    sadd key member
  • 获取集合的大小
    scard key
  • 获取集合的所有值,无序的
    smembers key
  • 判断member元素是否是集合key的成员
    sismember key member
  • 返回一个或多个随机set值,count可以不写默认返回一个
    srandmember key [count]
  • 移除集合中一个或多个成员
    srem key member1 [member2]
  • 随机移除count个元素,并返回这count个元素,不写默认为1
    spop key [count]
  • 将第一个集合中的元素移动到第二个集合
    smove source destination member
  • 第一个集合和第二个集合的差集,以第一个集合为准
    sdiff key [key...]
  • 集合的交集
    sinter key [key...]
  • 并集
    sunion key [key...]

ZSet

Redis中ZSet集合和普通集合一样,也是String类型元素的集合,也不能重复,不同的是每个元素都会关联一个float类型的分数,redis正是通过分数来为集合中的成员进行从小到大排序的,该分数是可以重复的

  • 添加一个或多个有序集合,该集合有一个分数,用来排序
    zadd key score member
  • 获取有序集合中的成员数
    zcard key
  • 获取指定范围集合的值,默认从低到高
    zrange key start stop
  • 获取指定范围分数的集合元素的个数
    zcount key min max
  • 返回指定元素的下标
    zrank key member
  • 获取指定范围集合的值,从高到低
    zrevrange key start stop
  • 移除集合中的指定的一个或多个元素
    zrem key member [member...]
  • 移除有序集合中给定的排名区间的所有成员,默认是从低到高排名,第一名是0
    zremrangebyrank key start stop
  • 移除有序集合中分数区间的成员
    zremrangebyscore key min max

缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级

Redis的缓存机制:当有查询操作时,会先查询Redis,如果Redis中没有该key,那么就会去查询数据库,并把查询结果写入到Redis中,当下一次查询的时候,就会直接从Redis中查询

缓存雪崩:由于内存的有限,我们一般会给缓存设置个有效期,如果redis中大量的key在同一时刻失效了,并且,这些失效的key被同时大量访问时,那么这些访问就会走数据库,而对数据库造成极大的压力

缓存雪崩解决方法:在缓存的时候给过期时间加上一个随机值,这样就会大幅度的减少缓存在同一时间过期

缓存穿透:就是查询的数据,在redis中不存在,在数据库中也不存在,查询结果是null,我们是无法写入到Redis中,当有100万的并发查询这个数据时,由于redis中不存在,那么都去数据库中查询,这样会给数据库造成极大的压力

缓存穿透的解决方法:如果发现查询的数据不存在,那么我们就给该key赋值,赋一个空字符串"",由于内存有限,对该空串设置一个较短的过期时间,这样当发生高并发时,就可以直接走redis缓存

缓存预热:就是我们程序猿,可以先把可能高访问的数据访问一遍,加载到redis缓存中,这样当项目部署之后,用户去访问就可以直接访问redis缓存了,减轻了数据库的访问压力

缓存更新:当我们更新数据时,我们先把数据库中的数据更新了,成功之后把缓存中的数据失效

缓存降级:当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级,例如,有些服务不稳定刚上线而超时,可以自行降级,再例如,由于特殊原因,数据错误了,需要人工降级

值得收藏的Redis基础总结相关推荐

  1. 值得收藏的数据库基础总结!

    文章目录 服务的启动和停止 数据库的相关操作 数据库表的相关操作 表中数据的相关操作 排序和分页 分组查询 联表查询 服务的启动和停止 停止数据库服务,在DOS下以管理员身份运行 net stop m ...

  2. Shell最最基础教程【案例讲解】【值得收藏系列】

    Shell基础教程[案例讲解] 第1章 Shell概述 第2章 Shell解析器 第3章 Shell脚本入门 1.脚本格式 2.第一个Shell脚本:helloworld 3.第二个Shell脚本:多 ...

  3. IT行业最全的服务器硬件基础知识大全,值得收藏

    IT行业最全的服务器硬件基础知识大全,值得收藏! 服务器对每个从事IT工作的人来说并不陌生,但是服务器所涉及的各种知识细节,并非大家都十分清楚,为了让大家深入了解服务器的关键知识点: 按照服务器体系架 ...

  4. 程序员非常实用的十个工具网站,值得收藏

    原文链接: 程序员非常实用的十个工具网站,值得收藏 一.regex101 网站地址: https://regex101.com/ 强大的正则表达式工具,你可以实时查看匹配信息,并且会用不同的颜色将 G ...

  5. 玩转Python必备:史上最全的Python库,【值得收藏,事半功倍】

    库名称     简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器 ...

  6. 值得收藏的40个黑客常用入侵端口总结

    值得收藏的40个黑客常用入侵端口总结-安全-PHP中文网 常用端口: 21端口渗透剖析 FTP通常用作对远程服务器进行管理,典型应用就是对web系统进行管理.一旦FTP密码泄露就直接威胁web系统安全 ...

  7. 值得收藏的45个Python优质资源(附链接)

    授权自AI科技大本营(ID:rgznai100) 本文共4157字,建议阅读7分钟. 本文为大家挑选了适合初学的45个Python的优质项目. 热门资源博客 Mybridge AI 比较了18000个 ...

  8. 关于java 绝对值得收藏的书籍

    关于java 绝对值得收藏的书籍 java23种设计模式实现.zip css2.0中文手册.chm JDK_API_1_6_zh_CN.CHM JAVA设计模式.chm Java.Server.Fac ...

  9. 软件:9款超级实用的办公软件,值得收藏!

    今天给大家分享9款超级实用的办公软件,值得收藏! 一.Quicker 作为全网好评的这款国产软件,可以秒杀很多办公软件.打开它的首页就能看到很多常用的工具,包括截图.快搜.百度翻译.OCR文字识别.o ...

最新文章

  1. CMD下提示“命令不是内部或外部命令”解决方法
  2. zookeeper 的安装配置及简单使用
  3. 电脑关闭计算机怎么重启计算机,教您电脑关机后总是重启怎么办
  4. 虚拟机游戏获取服务器地址,vue获取服务器地址
  5. 模拟网页行为之实践篇三
  6. 模拟——乒乓球(洛谷 P1042)
  7. 针对数据泵导出 (expdp) 和导入 (impdp)工具性能降低问题的检查表 (文档 ID 1549185.1)...
  8. socket 实现HttpClient简单类+csdn登陆源码
  9. 南京电子地图下载 离线电子地图
  10. 设备\Device\Harddisk1\DR1 有一个不正确的区块
  11. 如何用Python将普通视频变成动漫视频
  12. SAP ABAP搜狗输入法注释删除注释快捷键设置(未解决)
  13. 经典网络建设方案案例
  14. 钉钉自定义机器人提示报警信息
  15. The operating system 'Windows Vista Version 6.1' is not supported
  16. python快速入门神器 知乎_太香了!墙裂推荐6个Python数据分析神器!!
  17. MAC A1466 820-00165-A 进水不触发
  18. 统计并输出空格或回车、数字字符和其他字符的个数。
  19. msf拿到shell显示乱码解决方法以及chcp各种编码的补充
  20. android平板哪个好用吗,明明知道iPad更实用,却坚持买安卓平板,是一种什么心态?...

热门文章

  1. C#_基础_异常捕获(六)
  2. Java Web开发技术教程入门-Model1和Model2
  3. 学习有五个层次和境界
  4. MVC 程序开发对汽车种类的联动查询。厂商,系列,型号
  5. Android系列---JSON数据解析
  6. Oracle游标使用大全
  7. SSAS的MDX的基础函数(三),及聚合函数
  8. 方便好用的接口协作工具
  9. 常用的Oracle命令整理
  10. 功能测试-测试定义与原则