目录
redis还是要会的
- 欢迎来访我的个人博客 :Mosey
redis是什么
- redis是一个高性能的非关系型数据库,相对于普通的关系型数据库,redis的数据储存在缓存中,
读(110000次/s)写(81000次/s )数据非常快,Redis也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
redis数据类型了解一下
- String: 字符串
- Hash: 散列
- List: 列表
- Set: 集合
- Sorted Set: 有序集合
redis的安装和简单使用(windows环境下)
安装
- 下载地址:https://github.com/tporadowski/redis/releases。
- 下载 Redis-x64-xxx.zip压缩包并解压到D:\redis
启动(两种方式)
- 启动方法有cmd命令启动和exe文件启动。其实他们都一样,命令只是暗地里操作exe文件启动而已。
- 启动成功标志,出现6379
方式一
-
因没有配置redis的环境变量,所以使用cmd命令启动时要注意切换到redis的安装目录(解压目录)D:\redis,
-
输入redis-server.exe redis.windows.conf回车,会生成一个窗口,注意不要关闭这个服务端窗口。
-
然后再重新打开一个cmd窗口,输入redis-cli.exe -h 127.0.0.1 -p 6379,用于打开redis客户端,可查看redis相关信息和命令练习
方式二
- exe文件启动,按照下图顺序启动服务端和客户端
redis常用命令学习总结
- redis共有16个库,顺序从下标0开始。默认是第一个库,如要切换库,则要使用命令select index 例如:select 1代表切换到第二个库。
- 查看库中所有的键: keys *
- 命令太多要清屏: clear
老老实实做一个redis练习生
会唱、跳、rap、篮球还不够,还要会redis基础命令,下面是每个类型相关。
-
String相关
-
Hash相关
-
List相关
-
Set相关
-
Sorted Set相关
偷一下懒,移步去看菜鸟教程对应版块
redis的几个特性理解
- 缓存穿透 、
- 是指当Redis缓存中的key不存在value值时,就会请求到后台去查询数据库,如果并发量很高,就会造成数据库宕机
- 解决办法:法1:查到空数据也进行缓存,但要求设置很短的过期时间,一般为几分钟。法二:布隆过滤器
- 缓存击穿
- 是指Redis缓存中的key存在value值,但是过期了,该请求还是会去后台请求查询数据库,如果并发量很高同时查询同一条数据,也会造成数据库宕机。
- 解决办法:法一:直接设为永不过期就。法二:加互斥锁
- 缓存雪崩 、
- 是指多条或者无数条数据过期了,造成系统崩溃(例如:热点商品秒杀)
- 解决办法:
- 法一:直接设为永不过期就。
- 法二:随机过期(过期一部分,目的防止同一时间大量数据过期现象发生。)
Redis持久化的rdb方式和aof方式备份的区别
- RDB每隔一段时间进行备份,AOF每时每刻在写操作时进行备份,所以AOF备份出来的文件比RDB的要大,数据完整性也比RDB的要好。不过官方建议同时开启这两种持久化
- Redis 默认的持久化方式是 RDB ,并且默认是打开的
- 在配置文件中满足这些条件就会触发RDB备份操作
save 900 1
save 300 10
save 60 10000
- 如果要开启AOF备份,则要在配置文件中把 appendonly 改为 yes开启
- AOF备份有三种方式,在配置文件中选择其中一种即可
# appendfsync always //实时,每个操作都会备份(IO开销大)
appendfsync everysec //每秒,redis宕机会丢失一秒的数据(建议使用)
# appendfsync no
Redis数据恢复
- 如果有AOF文件,优先恢复AOF,没有则恢复RDB文件
Redis集群
集群定义
- 所谓的集群,就是通过添加多个相同的服务器,防止某台服务器发生事故,导致系统不能正常运行,从而让服务器达到一个稳定、高效的状态。
- 主从复制、
- 主库可读、可写。从库只读不写,所以可以把查询统统交给从库,增删改就交给主库。
- ps:Master主库有且仅有一个,建议从库最少设置两个
- 哨兵模式、
- 因为主从复制集群有一个致命的缺点,那就是主库发生故障,就不能进行增删改了,所以就产生了哨兵模式,
- 所谓的哨兵模式,就是当主库发生故障后,哨兵会在所有的从库中,自动选举一个新的库作为主库来进行增删改操作。
- 主从复制、
集群搭建
Redis事务
- 相关命令:
multi //开启事务
set ....... //数据库操作入队
exec/discard //执行或取消队列
- PS:Redis不支持事务回滚,队列中的某一个操作失败,其它的剩余操作照样执行,因为Redis认为这种错误应该发生在开发环境中,不应该出现在正式环境中,Redis并不帮程序员解决他造成的错误