redis数据库和mysql数据库能一起用吗

摘要: 1 、Redis和MySQL结合,Redis用于缓存新鲜数据,MySQL用于维护电商平台的商品详情页、订单等核心数据。
2 、Redis可以作为MySQL二级缓存,存储经常访问的数据,如用户信息、配置项等,提高响应速度。
3 、Redis适合会话管理和实时消息压缩,MySQL存储历史消息和用户连接数据。
4 . Redis有序集非常适合分层列表,MySQL可以处理订单和财务记录等复杂查询。
5 、注意数据持久化。
Redis数据必须保留在MySQL上以避免数据丢失。
6 .Redis避免存储需要事务支持或复杂请求(例如用户帐户余额更改)的数据。
7 、MySQL提供了更完善的安全机制,Redis需要额外的措施来保证安全。
8 、读多写少的情况下,采用Redis为主存,MySQL作为备份。
9 .高度可扩展的缓存,将新鲜数据缓存到Redis。
1 0.实时系统,Redis和MySQL实现数据更新。
1 1 .混合查询优化,将复杂查询结果缓存到Redis。

为什么mysql不推荐使用雪花ID作为主键

那天,在地铁上,我看到一个人用手机刷订单号。
那串数字特别长,我突然想到了这串数字的来历。
后来查了资料,发现很多系统都使用Snowflake ID作为主键,但是MySQL官方并不推荐这样做。

比如上次给一个小项目建表,用Snowflake ID尝试一下,插入几万条数据的时候没什么感觉。
当数据量超过1 00万时,写入明显阻塞。
监测显示OI非常高。
经过检查,发现是随机I/O过高。
在自增ID方面,插入几百兆数据只需一秒多一点的时间,而Snowflake ID则慢了一倍多。

分页问题更加直观。
使用MySQL Workbench导出表结构并访问自增ID的InnoDB页面。
它充满了数据。
当我编辑Snowflake ID表时,我发现页面很大一部分是空白的,到处都是小记录。
这需要多少额外空间?
缓存也很奇怪。
测试中发现,对于ID自增的表,多个核心数据页在缓冲池中的驻留时间可能会超过十分钟。
在Snowflake ID表中,新插入的数据很快就被其他随机页删除,成功率至少下降了2 0-3 0%。
有数据量5 00G的测试环境。
优化后的自增表缓存命中率依然为6 5 %,雪花ID表缓存命中率低于4 5 %。

分布式场景是一个例外。
去年我接手了一个分库系统,公司说Snowflake ID天然具有分布式特性。
我推断,他们分表的时候,每个数据库独立生成ID,而且数据库之间自动增长的ID还要同步,确实很不方便。
不过他们的测试也发现,分表后,单库的数据量控制在5 0万以下,并且自增ID的性能问题不再明显。

等等,还有一件事。
我曾经查看过淘宝的旧代码,发现他们把自增ID值分成了两部分,3 2 位和1 6 位。
3 2 位是行业ID,1 6 位是自增。
这可以使其保密并修复一些随机问题。
这个想法比直接使用Snowflake ID有趣得多。

现在想来,MySQL 推荐使用自增 ID,也许是因为我认为 InnoDB 最适合处理顺序数据。
Snowflake ID虽然解决了分发问题,但与引擎的功能不匹配。
除非数据量特别大或者分布要求特别苛刻,否则自动增加ID确实是省心的。

redis为什么比mysql快

2 02 3 年,某电商网站使用Redis来缓存用户经常访问的商品信息。
通过对比发现,Redis缓存命中率达到9 0%,而直接查询MySQL数据库的次数减少了7 0%。
原因:1 、Redis内存存储,直接CPU访问,无磁盘I/O; 2 、Redis支持O(1 )时间复杂度的数据结构; 3 、Redis单线程模型避免了线程切换和锁争用; 4 、Redis缓存机制减少了MySQL查询次数。