1、如何实现缓存同步?
redis常本用来作为缓存服务器。缓存的好处是减少服务器的压力,数据查询速度快。解决数据响应慢的问题。
所谓缓存同步,也就是在数据库的增删改操作完成之后,清除对应的缓存即可,下一次执行查询操作时,重新添加新的缓存,这样就很好的实现了缓存同步的问题。
2、redis支持事务命令:
- 开启事务:multi
- 提交事务:exec
- 回滚事务:discard
- 监听事务:watch(乐观锁)
3、redis常见性能问题和解决方案:
- Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
- 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
- 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
- 尽量避免在压力很大的主库上增加从库
- 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3…
4、redis的适用场景:
- 会话缓存(Session Cache):用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。
- 全页缓存(FPC):Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。
- 队列:Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。
- 排行榜/计数器:Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。
- 发布/订阅
5、redis的并发竞争问题怎么解决?
- 可以使用独占锁的方式,类似的操作还有mutex机制。不过实现相对复杂,成本比较高。
- 方案二:使用乐观锁的方式进行解决(成本低,非阻塞,性能较高)
如何使用乐观锁的方式进行解决?本质上是假设不会进行冲突,使用redis的命令watch进行构造条件,在watch构造条件下,如果对资源修改的过程中被watch检测的资源,如果在操作过程中发生变化,操作就会失败,回滚。