您好,登錄后才能下訂單哦!
本章介紹分布式架構的底層技術。主要說明面試過程中可能被問到的技術點。
緩存穿透
緩存學雪崩
Redis
Memcached
Guava
緩存穿透:查詢緩存和數據庫中一定不存在的數據時,每次查詢都是直接到數據庫的,這種現象稱為緩存穿透
此時,如果有大量的請求時,會對數據庫造成直接沖擊,甚至會導致崩潰
緩存雪崩:緩存服務器宕機了,那么所有查詢直接落在數據庫,對數據庫造成巨大壓力
熱點數據集中失效:本身大批量數據同時失效對Redis服務器也會造成影響,可能會出現慢的情形;再者失效期間,所有的用戶請求都會落到數據庫上,也會對數據庫造成巨大的壓力
string
Redis的最基本的數據結構,可以包含任意數據。一個key對應一個string的value。string類型是二進制安全的。每個string的value最大可以512M
支持的方法:set、get、mset、mget、setex、setnx
list
列表,一個簡單的字符串列表,按照插入的順序排序,可以向頭部(左邊)或尾部(右邊)添加數據,底層是鏈表
支持的方法:lpush、lpushx、lpop、lrange、lset、lindex、llen、rpush、rpop
set
string的無序集合
支持的方法:sadd、scard、sdiff、sinter、sunion、sismember、smembers
zset(sorted set)
sorted set有序集合,也是string的集合,但是有序的
支持的方法:zadd、zcard
hash
hash是一個鍵值對集合,是一個string類型的key(這里叫做field)和value的映射表,key相當于hash的名字,類似于Java中的Map<String, Map<String, String>>
支持的方法:hset、hget、hdel、hexists、hkeys、hlen、hgetall
Redis采用單進程單線程模式,本身沒有鎖的概念,其對于多個客戶端訪問不存在并發的問題
通過jedis客戶端進行并發訪問時會出現連接超時、數據轉換錯誤、阻塞等,通過以下方式解決:
redis通過定期刪除和惰性刪除來刪除過期的key
只靠這兩種機制還是刪除不完全的,此時就需要內存淘汰機制了
4.0新增
支持兩種持久化策略:一種是快照(snapshotting,RDB),另一種是只追加文件(append-only file,AOF)
是默認的持久化方式。在redis.conf中有以下配置
save 900 1 #在900秒(15分鐘)之后,如果至少有1個key發生變化,就會觸發BFSAVE創建快照
save 300 10 #在300秒(5分鐘)之后,如果至少有10個key發生變化,就會觸發BFSAVE創建快照
save 60 10000 #在60秒(1分鐘)之后,如果至少有10000個key發生變化,就會觸發BFSAVE創建快照
appendonly yes
開啟AOF后,每執行一條更改數據的命令,Redis就將該命令寫入硬盤中的AOF文件
在redis.conf中有三種不同的AOF配置
appendfsync always #每次更改數據都會寫入AOF文件,這會嚴重降低Redis的性能
appendfsync everysec #每秒同步一次,將多個命令同步到磁盤
appendfsync no #由操作系統決定何時同步
通過MULTI
,EXEC
,WATCH
等命令來實現事務功能
通過setnx實現
主數據庫(master)和從數據庫(slave)
一個master對應多個slave,一個slave只能有一個master
哨兵的作用是監控Redis系統的運行情況
多個哨兵監控一個master
只要將每個節點的cluster-enable配置打開即可,每個集群最少三個節點
選擇Memcached的理由:簡單
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。