1.redis是什麼?
redis是一個非關係型數據庫,主要是用來解決高併發,高可用產生的大數據存儲問題,它是單線程的操作。
2.redis有哪幾種數據類型,分別是什麼?
有五種類型:string,hash,list,set,zset
3.redis的基本操作?
字符串類型(string)get,set,mget,mset(set a 12)
散列類型(hash)hget,hset,hmset,hmget(hset hashtable a 12)
列表類型(list)push.pop,lrange(push listtable 12)
集合類型(set)(sadd settable 2)
有序集合類型(zset)(zadd zsetTable 12 11)
模糊獲取key:keys *;
4.redis持久化方案:
①基於快照的方式,默認;
②基於文檔追加的方式,配置:appendonly true;appendfsync everySsec;appendfilename "";
5.主備原理
1、 當從庫和主庫建立MS關係後,會向主數據庫發送SYNC命令;
2、 主庫接收到SYNC命令後會開始在後臺保存快照(RDB持久化過程),並將期間接收到的寫命令緩存起來;
3、 當快照完成後,主Redis會將快照文件和所有緩存的寫命令發送給從Redis;
4、 從Redis接收到後,會載入快照文件並且執行收到的緩存的命令;
5、 之後,主Redis每當接收到寫命令時就會將命令發送從Redis,從而保證數據的一致;
主從配置就是搞一個動態的備份;
6.集羣原理
6.1 數值存儲:Redis 集羣中內置了 16384 個哈希槽,當需要在 Redis 集羣中放置一個 key-value 時,redis 先對 key 使用 crc16 算法算出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽
,redis 會根據節點數量大致均等的將哈希槽映射到不同的節點。
6.2 集羣可用性:①節點之間使用ping-pang判斷彼此的鏈接性,當有一半節點認爲某節點掛了,該節點備用節點頂上。
②當有一半主節點掛掉就不可用。
7.redis雪崩和redis穿透處理方案
緩存穿透:當在大併發情況下,首先在redis緩存中查詢,查詢不到會到db中查詢,從而給db造成壓力。
方案一:設置布隆過濾器
方案二:返回空值進行存儲(建議)
緩存雪崩:某一時段導致大面積緩存key失效
方案一:redis設置主備
redis設置緩存鍵的失效時間要均勻(建議)
8.redis實際項目中的使用
Jedis
redisTemplate