一.redis怎么保证读写一致
1.延迟双删策略:延迟双删策略是指在更新数据库的时候,先删除缓存,再更新数据库,然后过一会几秒或者几百毫秒然后再删除缓存,这种办法可以避免缓存和数据库的不一致的问题。
(一般第一步先把缓存里的信息删除掉这样查询就不会查出和以前一样的数据了,这时候再更新一下数据库把信息更新了之后再删除一边缓存里的信息避免对数据库做更新的时候,有人查询这个的信息照成的数据不一致)
2.互斥锁:给进程上个互斥锁,让每次对数据库的访问都只能一个进程一个进程的访问,这样可以保证数据的一致性,也能给每个进程都上个互斥锁,但是对性能的影响太大了
3.先删缓存再更新数据库:这种方法虽然可以做到读写一致但是是不可取的,因为在高并发的情况下对数据库的访问的次数和缓存的访问次数较大,在刚更新了数据库前有人访问了缓存就会存一个没更新的数据所以不可取。
4.先更新数据库再删除缓存:这种也不可取在高并发的情况下更新数据库和删除缓存之间有空窗期这种情况下会照成读写不一致的情况这种的话不可取
二.Redis的事务是啥?redis还有事务?
事务的4大特性都还记得吧?
原子性:要么全部执行,要么全不执行
一致性:执行后数据保持一致
隔离性:因为redis是单线程的他一次只能执行一个本身自带隔离性
持久性:就是他的持久化机制吧
三.Redis的管道是什么
Redis的管道(Pipeline)是一种用于批量发送命令的技术,可以显著减少网络往返次数,从而提高性能。管道允许客户端一次性发送多个命令,而不需要等待每个命令的响应。这意味着,客户端可以在一次网络往返中发送多个命令,减少了网络延迟。
管道的工作原理
- 批量发送命令:客户端将多个命令一次性发送到Redis服务器,而不等待每个命令的响应。
- 服务器执行命令:Redis服务器接收到命令后,按顺序执行这些命令。
- 批量返回结果:Redis服务器执行完所有命令后,将所有结果一次性返回给客户端。
管道的优点
- 减少网络延迟:通过减少客户端与服务器之间的网络往返次数,显著提高了性能。
- 提高吞吐量:一次性发送和处理多个命令,提高了数据处理的吞吐量。
管道的缺点
- 内存消耗:在管道中发送大量命令可能会消耗较多内存,特别是在命令和数据量较大的情况下。
- 错误处理复杂:如果某个命令出错,处理错误可能会变得复杂,因为所有命令的结果是批量返回的。