值得收藏的Redis基础总结
文章目录
- 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基础总结相关推荐
- 值得收藏的数据库基础总结!
文章目录 服务的启动和停止 数据库的相关操作 数据库表的相关操作 表中数据的相关操作 排序和分页 分组查询 联表查询 服务的启动和停止 停止数据库服务,在DOS下以管理员身份运行 net stop m ...
- Shell最最基础教程【案例讲解】【值得收藏系列】
Shell基础教程[案例讲解] 第1章 Shell概述 第2章 Shell解析器 第3章 Shell脚本入门 1.脚本格式 2.第一个Shell脚本:helloworld 3.第二个Shell脚本:多 ...
- IT行业最全的服务器硬件基础知识大全,值得收藏
IT行业最全的服务器硬件基础知识大全,值得收藏! 服务器对每个从事IT工作的人来说并不陌生,但是服务器所涉及的各种知识细节,并非大家都十分清楚,为了让大家深入了解服务器的关键知识点: 按照服务器体系架 ...
- 程序员非常实用的十个工具网站,值得收藏
原文链接: 程序员非常实用的十个工具网站,值得收藏 一.regex101 网站地址: https://regex101.com/ 强大的正则表达式工具,你可以实时查看匹配信息,并且会用不同的颜色将 G ...
- 玩转Python必备:史上最全的Python库,【值得收藏,事半功倍】
库名称 简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器 ...
- 值得收藏的40个黑客常用入侵端口总结
值得收藏的40个黑客常用入侵端口总结-安全-PHP中文网 常用端口: 21端口渗透剖析 FTP通常用作对远程服务器进行管理,典型应用就是对web系统进行管理.一旦FTP密码泄露就直接威胁web系统安全 ...
- 值得收藏的45个Python优质资源(附链接)
授权自AI科技大本营(ID:rgznai100) 本文共4157字,建议阅读7分钟. 本文为大家挑选了适合初学的45个Python的优质项目. 热门资源博客 Mybridge AI 比较了18000个 ...
- 关于java 绝对值得收藏的书籍
关于java 绝对值得收藏的书籍 java23种设计模式实现.zip css2.0中文手册.chm JDK_API_1_6_zh_CN.CHM JAVA设计模式.chm Java.Server.Fac ...
- 软件:9款超级实用的办公软件,值得收藏!
今天给大家分享9款超级实用的办公软件,值得收藏! 一.Quicker 作为全网好评的这款国产软件,可以秒杀很多办公软件.打开它的首页就能看到很多常用的工具,包括截图.快搜.百度翻译.OCR文字识别.o ...
最新文章
- CMD下提示“命令不是内部或外部命令”解决方法
- zookeeper 的安装配置及简单使用
- 电脑关闭计算机怎么重启计算机,教您电脑关机后总是重启怎么办
- 虚拟机游戏获取服务器地址,vue获取服务器地址
- 模拟网页行为之实践篇三
- 模拟——乒乓球(洛谷 P1042)
- 针对数据泵导出 (expdp) 和导入 (impdp)工具性能降低问题的检查表 (文档 ID 1549185.1)...
- socket 实现HttpClient简单类+csdn登陆源码
- 南京电子地图下载 离线电子地图
- 设备\Device\Harddisk1\DR1 有一个不正确的区块
- 如何用Python将普通视频变成动漫视频
- SAP ABAP搜狗输入法注释删除注释快捷键设置(未解决)
- 经典网络建设方案案例
- 钉钉自定义机器人提示报警信息
- The operating system 'Windows Vista Version 6.1' is not supported
- python快速入门神器 知乎_太香了!墙裂推荐6个Python数据分析神器!!
- MAC A1466 820-00165-A 进水不触发
- 统计并输出空格或回车、数字字符和其他字符的个数。
- msf拿到shell显示乱码解决方法以及chcp各种编码的补充
- android平板哪个好用吗,明明知道iPad更实用,却坚持买安卓平板,是一种什么心态?...