欧美经典成人在观看线视频_嫩草成人影院_国产在线精品一区二区中文_国产欧美日韩综合二区三区

當前位置:首頁 > 前端設計 > 正文

redis一級緩存和二級緩存(redis面試必會6題經典)

redis一級緩存和二級緩存(redis面試必會6題經典)

大家好,今天給各位分享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),然后再刪除。這樣可以避免在刪除時出現緩存值不一致的情況。

因為緩存是分布式的,當一個緩存節點刪除緩存時,其他緩存節點可能還沒有更新緩存值,這時如果直接進行刪除,就會出現緩存值不一致的情況。而通過先將緩存設置為一個特殊值,可以確保所有緩存節點都已經更新緩存值,然后再進行刪除,就可以避免緩存值不一致的情況。

最后刪一次

最后刪一次是一種更加簡單的解決分布式環境下刪除緩存的方法,其基本思路是在刪除緩存時,只進行一次刪除操作,而不是兩次。

因為緩存是分布式的,當一個緩存節點刪除緩存時,其他緩存節點可能還沒有更新緩存值,這時如果直接進行刪除,就會出現緩存值不一致的情況。而通過只在最后一次需要刪除緩存時進行刪除操作,可以確保所有緩存節點都已經更新緩存值,就可以避免緩存值不一致的情況。

需要注意的是,最后刪一次的方法并不能完全避免緩存值不一致的情況,因為在最后一次刪除緩存之前,仍然存在緩存值不一致的可能性。但是,因為最后一次刪除緩存之前,緩存值已經被更新了很多次,所以出現不一致的情況會大大減少。

好了,本文到此結束,如果可以幫助到大家,還望關注本站哦!