服务端获取数据首先从redis获取,如果redis中的数据被删除就从mysql中获取数据,在把数据更新到redis
1.redis设置固定时间更新,时间不宜太长,缺点是修改mysql数据不会立即更新
2.更新mysql时同时删除redis的数据,但这个操作不是原子性的,如果这个时候有其他线程插进来也有可能造成数据不一致
3.redis里的数据设置为不过期,定期将mysql的数据更新到redis
以上几种情况都不可避免的有短时间内的数据不一致
如果有场景需要必须同时一致,比如银行,秒杀之类,有以下几种方法
1,所有数据都从MySQL中获取,但性能会很差,无法在高并发场景下使用
2,加锁,保证更新数据和删除缓存的操作的原子性