请问php 在什么场景下 才用redis 而不用mysql ?
在处理高并发或者队列时我们会使用redis来做缓存,最终都会写入到mysql中,如果单独使用redis作为存储到话,每次系统启动都需要加载数据到内存,所以在不使用mysql的时候我们会使用ssdb来存储数据
当缓存用是最多人的 场景,还有计数器, 使用场景可以看看那5种数据类型 使用场景,写写案例,
比如集合 set (2个集合交集,并集) ,有序集合zset (集合根据某字段排序) ,hash (模拟数据库key val) , list (双向链表) 还可以当轻量级 队列
按照Redis的设计,是充当缓存使用的,但是,如果根据现在互联网的发展速度,也可以把redis理解成数据库,可以把所有数据储存在redis。
在一般项目,都是充当缓存使用,如下场景
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答577 阅读✓ 已解决
786 阅读
Redis 的角色是“缓存”,MySQL 的角色是具备 ACID 特性的“关系型数据库”。
“缓存”存在的意义是提高读写性能(内存操作),但所存储的数据相对不是那么重要,可忍受丢失,而 MySQL 存在的意义是持久化储存数据,所以 Redis 的读写能力要远高于 MySQL,而对持久化的要求并不高。
如果把 MySQL 类比为电脑“硬盘”,那 Redis 就可以类比为电脑“内存”。所以它们的使用场景是不一样的,假如 MySQL 的读写能力能和 Redis 媲美,那确实就不再需要 Redis 了。
Redis 支持对存储的数据设置过期时间,过期后自动删除,所以对于存储临时数据是个很好的选择。
举几个例子:
存储用户授权 token
对持久化要求不高,即使全部丢失,最坏的情况也就是所有用户全部要求重新登录一次,没那么糟。但每个需要登录的页面都要验证用户 token,所以对读取性能要求高,可选择 Redis。并且用户 token 一般要有一个过期时间,Redis 刚好内建支持了。
存储订单数据
对持久化要求高,如果丢失一个订单,客户爸爸一定会把电话打到爆,一般订单的读写也不会那么频繁,也不需要那么极致的读写性能,所以可直接选择 MySQL。
存储产品数据
对持久化要求高,不能忍受丢失,同时也是高频读的数据,所以对读性能要求也高,所以就需要 MySQL 和 Redis 一起用。先把商品数据放 MySQL 存储一份,作为 the source of truth,然后再放 Redis 里“缓存”一份,如果 Redis 数据丢失,可以再通过读取 MySQL 来重建缓存。伪代码如下:
MySQL 和 Redis 之间并不是二选一,通常是要配合使用的,关键还是要对自己的场景进行分析和权衡,看自己对读写性能以及数据持久化的要求是什么样的。