Redis 有哪些功能?
數(shù)據(jù)緩存功能
分布式鎖的功能
支持數(shù)據(jù)持久化
支持事務
支持消息隊列
181. Redis 和 memcache 有什么區(qū)別?
存儲方式不同:memcache 把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會掛掉,數(shù)據(jù)不能超過內(nèi)存大??;Redis 有部份存在硬盤上,這樣能保證數(shù)據(jù)的持久性。
數(shù)據(jù)支持類型:memcache 對數(shù)據(jù)類型支持相對簡單;Redis 有復雜的數(shù)據(jù)類型。
使用底層模型不同:它們之間底層實現(xiàn)方式,以及與客戶端之間通信的應用協(xié)議不一樣,Redis 自己構建了 vm 機制,因為一般的系統(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會浪費一定的時間去移動和請求。
value 值大小不同:Redis 最大可以達到 512mb;memcache 只有 1mb。
182. Redis 為什么是單線程的?
因為 cpu 不是 Redis 的瓶頸,Redis 的瓶頸最有可能是機器內(nèi)存或者網(wǎng)絡帶寬。既然單線程容易實現(xiàn),而且 cpu 又不會成為瓶頸,那就順理成章地采用單線程的方案了。
關于 Redis 的性能,官方網(wǎng)站也有,普通筆記本輕松處理每秒幾十萬的請求。
而且單線程并不代表就慢 nginx 和 nodejs 也都是高性能單線程的代表。
183. 什么是緩存穿透?怎么解決?
緩存穿透:指查詢一個一定不存在的數(shù)據(jù),由于緩存是不命中時需要從數(shù)據(jù)庫查詢,查不到數(shù)據(jù)則不寫入緩存,這將導致這個不存在的數(shù)據(jù)每次請求都要到數(shù)據(jù)庫去查詢,造成緩存穿透。
解決方案:最簡單粗暴的方法如果一個查詢返回的數(shù)據(jù)為空(不管是數(shù)據(jù)不存在,還是系統(tǒng)故障),我們就把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鐘。
184. Redis 支持的數(shù)據(jù)類型有哪些?
Redis 支持的數(shù)據(jù)類型:string(字符串)、list(列表)、hash(字典)、set(集合)、zset(有序集合)。
185. Redis 支持的 Java 客戶端都有哪些?
支持的 Java 客戶端有 Redisson、jedis、lettuce 等。
186. jedis 和 Redisson 有哪些區(qū)別?
jedis:提供了比較全面的 Redis 命令的支持。
Redisson:實現(xiàn)了分布式和可擴展的 Java 數(shù)據(jù)結構,與 jedis 相比 Redisson 的功能相對簡單,不支持排序、事務、管道、分區(qū)等 Redis 特性。
187. 怎么保證緩存和數(shù)據(jù)庫數(shù)據(jù)的一致性?
合理設置緩存的過期時間。
新增、更改、刪除數(shù)據(jù)庫操作時同步更新 Redis,可以使用事物機制來保證數(shù)據(jù)的一致性。
188. Redis 持久化有幾種方式?
Redis 的持久化有兩種方式,或者說有兩種策略:
RDB(Redis Database):指定的時間間隔能對你的數(shù)據(jù)進行快照存儲。
AOF(Append Only File):每一個收到的寫命令都通過write函數(shù)追加到文件中。
189. Redis 怎么實現(xiàn)分布式鎖?
Redis 分布式鎖其實就是在系統(tǒng)里面占一個“坑”,其他程序也要占“坑”的時候,占用成功了就可以繼續(xù)執(zhí)行,失敗了就只能放棄或稍后重試。文章來源:http://www.zghlxwxcb.cn/news/detail-428180.html
占坑一般使用 setnx(set if not exists)指令,只允許被一個程序占有,使用完調(diào)用 del 釋放鎖。文章來源地址http://www.zghlxwxcb.cn/news/detail-428180.html
到了這里,關于4.24日報的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!