什么是Redis?
本文已参与「新人创作礼」活动,一起开启掘金创作之路。
Redis是一个高性能的开源的Key-Value数据库,个人理解它有如下几点好处
- 可持久化并且支持集群,可以将内存中的数据保存在磁盘中,哪怕Redis服务挂了重启数据也不会丢失。
- 性能极高,Redis读的速度是110000次/s,写的速度是81000次/s。
- Redis相比关系型数据库来说也是有事务的。
- 丰富的数据存储格式:Redis支持的数据类型有String、Hash、List、Set、Sorted Set
- 支持消息队列
为什么要使用Redis?
这也是很多开发者在面试中经常被问到的一个问题,非常简单,那无疑就是它快。但是并不是所有场景下它都适用,下面为大家解释一下!
Redis能做什么?
作为内存数据库,查询效率非常快,可以说是它为关系型数据库建起了一道壁垒,减少了一些关系型数据库的访问压力。那么Redis一般在哪些场景下使用呢?下面为大家举几种常见的例子。
- 缓存数据加载,例如一些热搜排行榜数据便可以使用Redis
- 电商常见的秒杀,也可以使用Redis
- 一些网站的点赞、阅读等等,可以先将数据存取到Redis再同步到数据库
什么场景下最好不要使用Redis?
- 如数据量太大,存放在缓存中会非常损耗资源。
- 如访问频率不高,存放在Redsi那就是浪费资源,所以说在考虑使用的时候一定要先看适不适合用。
- 数据经常变化不适用,需要在数据各种变动的时候去维护这个Key
上面讲的也不是非常的全面,如果感兴趣可以自己再去查阅书籍,结合平时在项目中的一些感受,去选择使用Redis
如何安装Redis?
使用Docker安装Redis
由于笔者有过Docker基础,在本文中就使用Docker安装。
docker run -d --name redis-dev -p6379:6379 -v /d/dockerdata/redis/data:/data redis --appendonly yes
- -p 映射端口,前面的 6379 是外部 redis 端口,后面的 6379 是容器内部的 redis 端口
- -name 容器对应的名称
- --appendonly yes 开启 AOF 持久化
Windows安装
Redis下载地址 | 直接下载,解压之后使用命令行指定对应文件夹输入如下命令即可运行。
redis-server.exe redis.windows.conf
使用Redis遇到的一些问题
这个问题可以说是中级软件工程师高频面试题,如果单纯只是拿他当工具,没遇到问题就不去考虑,那将毫无意义。虽然说一些类型的项目用户量比较少,可能不会出现一下情况,但是也可以了解了解,万一面试遇到了呢。Redis主要出现的问题有如下几个。
缓存雪崩
缓存雪崩是指在某一时间Redis服务挂掉了,或者说大量Key由于设置时间都一样,在同一时间失效,导致数据库压力骤增,可能会导致系统崩溃。
- 解决方法
- 可以在原有缓存时间基础上加上一个随机值,防止缓存同一时间失效。
- 加互斥锁,当热点key过期后,只有第一个请求能获取锁并阻塞,此时该请求查询数据库,并将查询结果写入redis后释放锁。
缓存击穿
缓存击穿是指某一些访问量较大的热点数据存放在缓存里,由于访问量较大,缓存未命中导致服务器宕机。
- 解决方法
- 设置缓存永不过期,或者使用一些服务给热点数据续期。
- 也可以使用上方的互斥锁
缓存穿透
缓存穿透指访问数据既不在Redis中,也不再数据库里,服务无法将数据更新到缓存中,导致缓存和数据库压力都增大。
- 解决办法
- 缓存空值,如果数据库不存在的时候,将空值存入Key中
- 入口增加校验,对于一些非法参数直接将其过滤掉
- 使用布隆过滤器(还没有太深的使用这个东西,感兴趣可以去研究研究)
总结
在平时的工作中使用缓存的场景还是非常之多的,大家在用的同事也需要去考虑一些极端情况该如何处理,这样就不会导致生产环境出现问题,客户炸锅的情况。本文如果描述的有错误的地方,还请大家指出,我会及时更新此文,谢谢。