redis

1、爲什麼使用 Redis
性能:耗時且返回結果變化不頻繁,
例如:秒殺獲取秒殺商品集合,做到不同地區不同會員級別獲取不同的商品集合
處理:if(get(地區+會員級別) ==null){
數據庫獲取商品集合
set(地區+會員級別,商品集合,超時時間);
}
注意:在獲取redi緩存之前,一定要檢驗地區和會員級別在不在你的設置的集合裏(可以用redis來存放這個集合),如果沒有就給默認值(不然就會造成緩存穿透)
併發:數據庫的頻繁交互
例如:獲取首頁的商品詳情(首頁的商品獲取很頻繁,如果每個都和數據庫交互系統壓力很大)
處理:if(get(商品id) ==null){
數據庫獲取商品詳情
set(商品id,商品詳情,超時時間(10-15));
}
注意:設置超時時間不要設定爲固定值,如果設置爲固定值可能導致(緩存雪蹦)

2、使用 Redis 的常見問題
緩存和數據庫雙寫一致性問題
最終一致性
強一致性:不能放緩存,例如:商品庫存
緩存雪崩問題
設置超時時間不要設定爲固定值,如果設置爲固定值可能導
緩存擊穿問題
在獲取redi緩存之前,一定要檢驗地區和會員級別在不在你的設置的集合裏(可以用redis來存放這個集合),如果沒有就給默認值(不然就會造成緩存穿透)
緩存的併發競爭問題

3、單線程的 Redis 爲什麼這麼快
純內存操作
單線程操作,避免了頻繁的上下文切換
採用了非阻塞 I/O 多路複用機制
自我理解非阻塞 I/O 多路複用機制第二種:

	List<String> request = new ArrayList<>();
    request.add("0");
    request.add("1");
    request.add("2");
    request.add("3");
    request.add("4");
    String[] redis = new String[100000];
    //第一種
    for (int i = 0; i < request.size(); i++) {
        Thread.sleep(10000);
        redis[i] = request.get(i);
    }
    //第二種(由於只用放到指定socket,就可以成功返回了,所以效率高)
    //第一步和第二步都在同時進行
    //第一步單線程存到socket  
    Map<Integer,String> socket = new HashMap<>();
    for (int i = 0; i < request.size(); i++) {
        Thread.sleep(10);
        socket.put(i,request.get(i));
    }
    //第二步單線程存儲到redis
    while (socket.size() !=0){
        for (Integer i : socket.keySet()) {
            Thread.sleep(10000);
            redis[i] = socket.get(i);
        }
    }

4、Redis 的數據類型及使用場景
String
get、獲取
set、設置
incr、值自增一(例如:緩存點贊次數)
decr 值自減一 (例如:緩存點贊次數)
Hash
hset, 通過KEY和HashKey設置值
hget, 返回單個HashKey的值
hgetall 返回全部HashKey的值
hset user name lzh
hset user age 18
hget user name 結果:lzh
hgetall user 結果:lzh,18
List
lpush,左插入
rpush,右插入
lpop,左移除
rpop,右移除
lrange AList 0 5 ,獲取第0個到5個元素
lrange AList 0 -1 ,獲取全部元素
Set
sadd, 添加
spop,移除
smembers,獲取全部元素
sunion Aset,Bset的合集
smember Aset nihao,nihao在集合Aset裏
Sorted Set 帶權重的set
zadd, 添加
zrange, 區間獲取集合
zrem, 移除
zcard 數量
Pub/Sub
發佈(Publish)與訂閱(Subscribe)
Transactions
5、Redis 的過期策略和內存淘汰機制
被動刪除:當讀/寫一個已經過期的key時,會觸發惰性刪除策略,直接刪除掉這個過期key
主動刪除:由於惰性刪除策略無法保證冷數據被及時刪掉,所以Redis會定期主動淘汰一批已過期的key
當前已用內存超過maxmemory限定時,觸發主動清理策略

注:http://www.cnblogs.com/mrhgw/p/6278619.html
注:https://mp.weixin.qq.com/s/1TXICDZ_BoJ7FeAFqiZa5A
注:https://mp.weixin.qq.com/s/8fdBKAyHZrfHmSajXT_dnA
注:http://redisdoc.com/index.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章