在專案開發過程中,筆主使用redis也有一段時間了。在一些特性的場景,redis能幫助我們解決一些問題。因此,總結一下分享給大家。
1.使用redis實現分布式鎖
/**
* redis訪問工具類
*/@component
public class redisdao
}
@component
public class redisdao catch (exception e) ", e);
} return flag;
}}
2.分布式場景下使用redis生成有序遞增序列
筆主在開發過程中有個需求,要求主鍵的格式為「***+有序遞增的數字」,***是乙個特定的字串常量。這時,借助mysql的主鍵自增功能顯然不能滿足需求。這時,可以借助long increment(k key, long delta)生成有序遞增的數字,然後拼接出主鍵。
@component
public class redisdao
}
3.使用 bitmap 實現使用者上線次數統計
4.使用redis的list結構實現分布式佇列
5.使用redis的set結構實現集合間的並集、交集、差集
例如:兩個不同的使用者共同關注了哪些主播
6.使用redis的zset結構實現排行榜統計
例如:某個主播的粉絲貢獻排行榜,假設主播id為001,這裡定義該主播的粉絲貢獻排行榜的key為fans_contribution_rank_001。
/**
* redis訪問工具類
*/ @component
public class redisdao
/*** 返回按照分數從高到低排序的zset集合
* @param key 鍵
* @return
*/public set> reverserangebyscorewithscores (string key)
}
新增打賞記錄和查詢的測試**如下:
@runwith(springrunner.class)
@springboottest
@autowired
private testservice testservice;
@autowired
private redisdao redisdao;
@test
public void contextloads() , score:{}", arg.getvalue(), arg.getscore());
} }}
測試結果如下:
2018-12-03 17:29:31.841 - values:100005 , score:360.0
2018-12-03 17:29:31.842 - values:100007 , score:270.0
2018-12-03 17:29:31.842 - values:100004 , score:210.0
2018-12-03 17:29:31.842 - values:100006 , score:180.0
2018-12-03 17:29:31.842 - values:100001 , score:100.0
2018-12-03 17:29:31.842 - values:100003 , score:50.0
2018-12-03 17:29:31.842 - values:100002 , score:20.0
Redis使用總結
1 常用記憶體優化手段與引數 通過我們上面的一些實現上的分析可以看出redis實際上的記憶體管理成本非常高,即占用了過多的記憶體,作者對這點也非常清楚,所以提供了一系列的引數和手段來控制和節省記憶體,我們分別來討論下。首先最重要的一點是不要開啟redis的vm選項,即虛擬記憶體功能,這個本來是作為r...
redis使用優化總結學習
在redis的使用中,因為其是單程序在執行,所有在實際使用的過程中因為實際情況可能經常需要進行優化。所以,蒐集了資料學習總結下。1,redis中主要的儲存方式key value模型的儲存方式,在其內部提供了多種的資料型別,可根據實際的情況使用對用的結構型別。目前發現在實際情況,基本上都是用的hash...
Redis使用總結 (序列三)
概述 1 為什麼使用redis 2 使用redis有什麼缺點 3 單執行緒的redis為什麼這麼快 4 redis的資料型別,以及每種資料型別的使用場景 5 redis的過期策略以及記憶體淘汰機制 6 redis和資料庫雙寫一致性問題 7 如何應對快取穿透和快取雪崩問題 8 如何解決redis的併發...