redis一级缓存和二级缓存(redis面试必会6题经典)
- 前端设计
- 2023-08-13
- 77
大家好,今天给各位分享redis一级缓存和二级缓存的一些知识,其中也会对redis面试必会6题经典进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注...
大家好,今天给各位分享redis一级缓存和二级缓存的一些知识,其中也会对redis面试必会6题经典进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
本地缓存和redis区别
本地缓存和Redis都是用于存储数据的工具,但它们有区别:
存储位置不同:本地缓存存储在应用程序进程内部的内存中,而Redis是一个独立的进程,通过网络协议提供服务。
存储策略不同:本地缓存的存储策略通常是基于LRU算法实现的,即最近最少使用的数据会被清除;而Redis默认使用的是基于虚拟内存的方式,即数据会被存储在内存和磁盘中,内存不足时,部分数据会被换出到磁盘中。
功能不同:本地缓存通常只能用于单机应用程序的缓存,而Redis可以支持分布式缓存和持久化存储、消息队列等多种功能。
性能不同:由于本地缓存存储在应用程序内部,访问速度较快,但由于存储空间有限,可能会导致应用程序频繁的访问数据库;而Redis作为一个独立的进程,可以独立于应用程序,提供更快的数据访问速度和更稳定的性能。
因此,本地缓存和Redis都有各自的优点和适用场景,需要根据具体的业务需求和性能需求综合考虑。
redis和map有什么区别
二者主要区别如下:
1、Redis可以用几十G内存来做缓存,Map不行,一般JVM也就分几个G数据就够大了
2、Redis的缓存可以持久化,Map是内存对象,程序一重启数据就没了
3、Redis可以实现分布式的缓存,Map只能存在创建它的程序里
4、Redis可以处理每秒百万级的并发,是专业的缓存服务,Map只是一个普通的对象
5、Redis缓存有过期机制,Map本身无此功能
6、Redis有丰富的API,Map就简单太多了
redis怎么缓存用户列表,做到可以分页展示
普通分页
一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点。
如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了。
比如像微博这样的场景,微博下面现在有一个顶次数的排序。这个用传统的分页方式很难应对。
一种思路
最近想到了另一种思路。
数据以ID为key缓存到Redis里;
把数据ID和排序打分存到Redis的skiplist,即zset里;
当查找数据时,先从Redis里的skiplist取出对应的分页数据,得到ID列表。
用multiget从redis上一次性把ID列表里的所有数据都取出来。如果有缺少某些ID的数据,再从数据库里查找,再一块返回给用户,并把查出来的数据按ID缓存到Redis里。
在最后一步,可以有一些小技巧:
比如在缺少一些ID数据的情况下,先直接返回给用户,然后前端再用ajax请求缺少的ID的数据,再动态刷新。
还有一些可能用Lua脚本合并操作的优化,不过考虑到Lua脚本比较慢,可能要仔细测试。
如果是利用Lua脚本的话,可以在一个请求里完成下面的操作:
查找某页的所有文章,返回已缓存的文章的ID及内容,还有不在缓存里的文章的ID列表。
其它的一些东东:
Lua是支持LRU模式的,即像Memcached一样工作。但是貌似没有见到有人这样用,很是奇怪。
可能是用redis早就准备好把redis做存储了,也不担心内存的容量问题。
Redis在实际应用中,是单独部署在一个服务器中,还是和项目跑在一个服务器中,还是跑在数据库服务器
看规模吧!小规模直接用docker跟服务一起跑。我们是直接跑k8s上,通过redis-operator来管理redis集群,使用sentinel模式!redis集群的运维工作基本上由k8s管理,扩缩容都是秒级实现。容器技术出来以后,基本很少用宿主机跑redis,除了一些老项目以外,新项目都直接容器化了。
redis 本地缓存性能比较
不考虑并发问题,本地缓存自然是最快的。但是如果本地缓存不加锁,那应并发了咋办呢?所以,我们以加锁方式再比较一次。
场景使用,同一数据,从数据库取出来,放到redis只要一次,而放到本地缓存,则需要n个集群次
redis可以写磁盘,持久化,本地缓存不可以或者说很麻烦要考虑的东西太多
redis双删和最后删一次区别
Redis双删和最后删一次都是解决删除缓存在分布式环境下可能出现的问题,但它们实现的方式不同。
Redis双删
Redis双删是一种常见的解决分布式环境下删除缓存的方法,其基本思路是在删除缓存之前,先将缓存设置为一个特殊值(如null),然后再删除。这样可以避免在删除时出现缓存值不一致的情况。
因为缓存是分布式的,当一个缓存节点删除缓存时,其他缓存节点可能还没有更新缓存值,这时如果直接进行删除,就会出现缓存值不一致的情况。而通过先将缓存设置为一个特殊值,可以确保所有缓存节点都已经更新缓存值,然后再进行删除,就可以避免缓存值不一致的情况。
最后删一次
最后删一次是一种更加简单的解决分布式环境下删除缓存的方法,其基本思路是在删除缓存时,只进行一次删除操作,而不是两次。
因为缓存是分布式的,当一个缓存节点删除缓存时,其他缓存节点可能还没有更新缓存值,这时如果直接进行删除,就会出现缓存值不一致的情况。而通过只在最后一次需要删除缓存时进行删除操作,可以确保所有缓存节点都已经更新缓存值,就可以避免缓存值不一致的情况。
需要注意的是,最后删一次的方法并不能完全避免缓存值不一致的情况,因为在最后一次删除缓存之前,仍然存在缓存值不一致的可能性。但是,因为最后一次删除缓存之前,缓存值已经被更新了很多次,所以出现不一致的情况会大大减少。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!
本文链接:http://xinin56.com/qianduan/3220.html