Redis 本身有持久化,为什么还要写进 MySQL?

本文探讨了MySQL和Redis在权限控制、数据持久性、负载均衡以及数据隔离方面的区别,强调了两者在不同应用场景中的优劣和选择依据。
  1. 权限控制
    MySQL 有权限控制,用户可以精确到每个 IP 的每个账户,目标可以精确到每个表的每个操作。
    Redis 则是天生设计成完全开放权限,包括完全删除数据库的操作,任何人都可以执行。要么就只能把指令重命名成空的,完全禁止任何人执行。

  2. 数据完整
    MySQL 的数据库保存在磁盘中,万一崩溃断电,也有数据库日志可以用以完成数据库事务。
    MySQL 支持主从备份,所有的写入操作都可以实时发送到异地,哪怕突然机房被核弹轰炸,也不会丢失数据(可能除了最后几条语句)。
    Redis 的崩溃……嗯小心数据全丢。
    Redis 的 Replication 备份……嗯小心数据全丢。

  3. 负载均衡
    MySQL 可以单主多从,也可以胆子够大在内网做双主,也可以用 innodb 配合 galera 做集群,每台机器都有一个独立的拷贝,因此服务器之间只要传输写指令即可。
    Redis 可以单主多从(然而小心数据全丢),但是不能做多主互联。最多最多只能做 sharding ,也就是每台机器只保存一部分数据,读写一律被分散到其他机器上。直接后果就是内网流量大增。

  4. 数据隔离
    MySQL 里我可以选择删掉某个应用的所有数据而保留另一个应用的所有数据。
    Redis 里要么依赖 11 个 DB 的选择,要么依赖命名空间。

  5. 性价比
    MySQL 是内存+硬盘,上个 SSD 配合 Query Cache 那速度已经是很快了。
    Redis 是纯内存。乖乖掏钱加内存换至强啦。而且你还是得配备高性能磁盘,因为定时刷到磁盘和开机加载数据的操作还是要磁盘性能的。

  6. 数据库可以使用事务

  7. 需求不同
    开发这样想是对的,但是其他的人可能会面临新的压力,新的技术挑战,所以需求定位是最终的出发点,除非哪天 Redis 的统计也能做的很溜.

参考链接:
1、redis 本身有持久化,为什么还要写进 mysql 呢?

在 Docker 中安装 MySQLRedis 并实现持久化存储可以按照以下步骤进行: ### 安装 MySQL 并实现持久化存储 运行以下命令来创建并运行 MySQL 容器,同时进行数据挂载以实现持久化存储: ```bash docker run -d -p 3306:3306 --privileged=true -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7 ``` 上述命令的参数解释如下: - `-d`:让容器在后台运行。 - `-p 3306:3306`:将容器内的 3306 端口映射到宿主机的 3306 端口。 - `--privileged=true`:给予容器特权。 - `-v /mydata/mysql/log:/var/log/mysql`:将宿主机的 `/mydata/mysql/log` 目录挂载到容器内的 `/var/log/mysql` 目录,用于存储日志。 - `-v /mydata/mysql/data:/var/lib/mysql`:将宿主机的 `/mydata/mysql/data` 目录挂载到容器内的 `/var/lib/mysql` 目录,用于存储数据。 - `-v /mydata/mysql/conf:/etc/mysql/conf.d`:将宿主机的 `/mydata/mysql/conf` 目录挂载到容器内的 `/etc/mysql/conf.d` 目录,用于存储配置文件。 - `-e MYSQL_ROOT_PASSWORD=123456`:设置 MySQL 的 root 用户密码为 123456。 - `--name mysql`:给容器命名为 mysql。 - `mysql:5.7`:使用 MySQL 5.7 版本的镜像 [^3]。 ### 安装 Redis 并实现持久化存储 持久化及更多相关配置可以参考 Redis 官方配置文档。可以通过以下命令设置 Redis 容器开机自启: ```bash sudo docker update redis --restart=always ``` 若不小心删掉了 MySQL 这个镜像实例,可以重新创建运行 MySQL 容器,容器挂载文件要和之前目录一致,然后重新进入容器内部,数据都还在。删除镜像实例的命令为: ```bash docker rm -f mysql ``` 重新创建运行 MySQL 容器的命令为: ```bash docker run -d -p 3306:3306 --privileged=true -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7 ``` [^1][^3] ### 容器内操作 #### MySQL 容器内操作 进入 MySQL 容器: ```bash docker exec -it mysql bash mysql -u root -p ``` 定位容器位置: ```bash whereis mysql ``` 退出容器: ```bash exit ``` 重启容器: ```bash docker restart mysql ``` [^2] #### Redis 容器内操作 进入 Redis 容器: ```bash docker exec -it myredis bash ``` 启动 Redis: ```bash redis-cli ``` 如果设置了 Redis 密码,需要使用 `-a` 参数来提供密码: ```bash redis-cli -a your_redis_password ``` [^4]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值