外卖Day7
缓存菜品ok
springcacheok
自己加了redission---分布式锁
- 对于菜品和套餐的缓存,在管理端新增,删除,改价,停售需要删除缓存,后面用户查询菜品->先查缓存->缓存不存在查询数据库并写入缓存
- 对于店铺营业状态的同步,用户在查看店铺状态时,需要让数据库与 redis 高度保持一致,因为如果店铺没有营业的话就不能点单了,所以它要求时效性比较高,所以采用的读写锁保证的强一致性。
我们采用的是 redisson 实现的读写锁(RReadWriteLock),在读的时候添加共享锁,可以保证读读不互斥,读写互斥。
当我们更新数据的时候,添加排他锁,它是读写,读读都互斥,这样就能保证在写数据的同时是不会让其他线程读数据的,避免了脏数据。
步骤:
- 创建redission客户端实例
- getlock、getReadWriteLock
- lock.readLock().lock()
- finally unlock()
当然也可以设置锁的有效期:
锁的自动续期、公平锁支持
分布式锁中的王者方案-Redisson - 悟空聊架构 - 博客园
概念:
可重入锁:
阻塞其他线程、
redission宕机看门狗死了锁会30s释放
读写锁:
读锁:互斥、排他
写锁:共享