Redis 你该懂的点
前言
頭一次用這種標題哈哈哈感覺有點。。反正這是一篇關于Redis相關知識點的Blog,面試中會問到的(比重會比較大哈),持續(xù)收集更新中
什么是Redis?
一般很少會問這個啦,一般都是問你在真實開發(fā)中,在哪兒用到了Redis,不過還是該知道的;
Redis是主流的鍵值對存儲數(shù)據(jù)庫(NoSQL),通常全部數(shù)據(jù)都存在內(nèi)存中(為什么這么快的主要原因之一!),但也支持持久化策略,支持事務(資源允許的話,可以當作DB了),并且Redis支持豐富的數(shù)據(jù)類型(能夠應對大部分場景),Redis是單線程的(沒有線程安全問題,沒有鎖的煩惱)
Redis支持的數(shù)據(jù)類型
在了解Redis能做什么之前,我們先了解下Redis支持的數(shù)據(jù)類型
常用
- Redis Key
二進制安全的 Key
任何二進制序列都可以作為Key,從字符到JPEG文件的內(nèi)容,可以存空字符
允許的最大值為 512 M - String 字符串
- List 列表
- Zest / Sorted Sets 有序集合
- Set 集合
- Hash 字典
進階
- Bitmap / 位圖
- HyperLogLogs / 計算唯一事物的概率數(shù)據(jù)結(jié)構(gòu)
Redis 能做什么?
這是最實際的問題,也是面試中Redis的高頻問題
-
緩存 / cache :
加快查詢速度,存儲熱點數(shù)據(jù)
會話緩存,用戶是否在線,通過時效性
記錄在線人數(shù),通過incr -
數(shù)據(jù)庫存儲 / Database
沒有像 MySQL 等的I/O操作限制,支持事務,支持豐富的數(shù)據(jù)結(jié)構(gòu),不做DB存儲就太可惜了吧
火熱排行榜: Zset
社交列表: Set
全局唯一ID / 計數(shù)器(每個IP請求限制等等): String 的 incr -
信息隊列 / message broker
Redis也是 Pub - Sub 服務器(小聲bb,一般不會用到,有用到的,請用力噴我,讓我清醒)
通過三個命令 SUBSCRIBE(訂閱),UNSUBSCRIBE(取消訂閱) 和 PUBLISH(發(fā)布信息) 實現(xiàn)了信息訂閱發(fā)布服務
官方有個實踐案例多用戶高性能的Web聊天,使用EventMachine和Redis:鏈接
相比 memcached 有哪些優(yōu)勢?
面試中總會問同類型技術(shù)的比較,Spring和Spring Boot 的區(qū)別,MyBatis 和 Hibernate 的區(qū)別啦,Redis 一般都是和 NoSQL 比較
- memcached只支持字符,Redis 支持豐富的數(shù)據(jù)類型
- Redis 支持持久化數(shù)據(jù),而memcached沒有,只能存在內(nèi)存中
- memcached能緩存的內(nèi)容沒有 Redis 那么靈活
默認 Key 最大是250字節(jié),Value 是1MB,不過官方有說明 memcached 本身就是用來存儲小塊的任意數(shù)據(jù)(字符串、對象)。這些數(shù)據(jù)可以是數(shù)據(jù)庫調(diào)用、API調(diào)用或者是頁面渲染的結(jié)果。
Redis 持久化策略
Redis 的持久化策略是面試中比較高頻的問題,Redis 中提供了兩種持久化策略,可以根據(jù)業(yè)務需求選擇其中一種,也支持兩個策略都開,當然也可以都禁用
- RDB持久化( Reids 在內(nèi)存中的數(shù)據(jù)庫記錄定時 dump 到磁盤上的 RDB 持久化)
- AOF 持久化( Reids 的操作日志以追加的方式寫入文件)
AOF
AOF 持久化以日志的形式記錄 Redis 服務所處理的每一個寫,刪操作,以文本方式保存;Redis重啟時,會優(yōu)先選擇 AOF 文件恢復數(shù)據(jù),在服務器啟動時逐條執(zhí)行 AOF 日志里的命令
RDB
以指定的時間間隔執(zhí)行數(shù)據(jù)集的時間點快照。
Redis將數(shù)據(jù)集的快照保存在磁盤上,名為dump.rdb的文件。如果數(shù)據(jù)集中至少有M個更改,則可以將Redis配置為生成一次快照,或者可以手動調(diào)用 SAVE 或 BGSAVE 命令。
下面是RDB持久化配置例子:
-
SAVE 和 BGSAVE 兩個備份(持久化)命令
備份 redis 可以手動使用 SAVE 命令,執(zhí)行 SAVE 命令會使用主進程執(zhí)行快照操作,這意味著在 SAVE 的過程中,會阻塞主進程。
使用 BGSAVE 的話,redis 會 fork 出一個子進程來執(zhí)行快照操作,而不影響主進程。 -
為什么用 RDB 持久化策略
RDB 是 Redis 數(shù)據(jù)的一個非常緊湊的單文件時間點表示。RDB 文件非常適合備份。例如,您可能希望在最近24小時內(nèi)每小時歸檔您的RDB文件。可以在發(fā)生災難時輕松恢復數(shù)據(jù)集的不同時間段的數(shù)據(jù)
RDB非常適合災難恢復,可以將單個壓縮文件傳輸?shù)竭h端數(shù)據(jù)中心
與AOF相比,RDB更適合 Redis 數(shù)據(jù)量大時,更快地重啟 Redis(AOF 一條條寫命令重新執(zhí)行,數(shù)據(jù)量一大,能不慢嗎)
參考文獻
Redis官網(wǎng)
Redis:WiKi
memcached:GitHub
轉(zhuǎn)載于:https://juejin.im/post/5d5ab07ce51d4561ee1bdf6b
總結(jié)
以上是生活随笔為你收集整理的Redis 你该懂的点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二分法(计算方法)
- 下一篇: Linux服务源码安装后开机自启动04-