位圖
用redis點陣圖節約儲存空間
set s h 整存
setbit s 1 1 設定第一位為1
get s 整取
getbit s 12 獲取第12位
bitfield w get u3 2 從第3位開始取 取3位作為無符號數
bitfield w set u8 8 97 從第9位開始 接下來的8位用97代替
bitfield w incrby u4 2 1 從第三位開始 接下來的4位 加 1
預設折返,也就是為溢位截斷。
溢位策略子指令 sat:保持最大值 fail: 失敗不執行
bitfield w overflow sat/fail incrby u4 2 1
hyperloglog12kb
pfadd co u1 u2 u3
pfcount co
pfmerge co co1
分布式鎖 延時佇列(非同步對列) 限流 漏斗限流
執行緒io模型
單執行緒
1.事件輪詢 多路復用 響應io
2.定時任務 維護最小堆
通訊協議
resp
持久化
快照+aof
快照是二進位制的序列化的增量備份
aof是記憶體資料修改的指令記錄文字,先執行 再序列化 需要定期**
cow 多程序 copy on write
父子頁面共享**塊與資料
父程序響應請求 修改頁面 cow 會在修改時把共享頁面複製出來
子程序進行序列化操作
aof重寫
bgrewriteaof
快照會遍歷整個記憶體 aof的fsync是個耗時的io操作,降低效能,增加io負擔
因此採用主從複製
混合持久化
增量aof日誌 + rdb
管道
redis壓力測試工具
> redis-benchmark -t set -q
set 5w/s
>redis-benchmark -t set -p 2 -q
jedis jedis = new jedis("192.168.229.128", 6379);
// 開啟管道
pipeline pipelined = jedis.pipelined();
for(int i = 0; i < 100000; i++)
// 提交命令
pipelined.sync();
事務不具備原子性 僅僅具有隔離性中的序列化一般事務: begin commit rollback
redis: multi exec discard
樂觀鎖
jedis.watch(key);
int value = integer.parseint(jedis.get(key));
value *= 2;
//事務
transaction tx = jedis.multi();
tx.set(key,value);
listres = tx.exec();
if(res!=null)
redis value最大值 redis記憶體優化
小的聚合型別資料的特殊編碼處理 redis2.2版本及以後,儲存集合資料的時候會採用記憶體壓縮技術,以使用更少的記憶體儲存更多的資料。如hashes,lists,sets和sorted sets,當這些集合中的所有數都小於乙個給定的元素,並且集合中元素數量小於某個值時,儲存的資料會被以一種非常節省記...
int 最大值 239 滑動視窗最大值
給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置 最大...
算式最大值
演算法給定 1 n個正整數a1,a2,an 2 p個加號 和q個減號 p q n 1 3 k對括號 請你使用全部整數 加減號和括號,組成乙個合法的算式 a1 an在算式中的順序隨意 使得算式的結果最大。注意加減號只能作為二元運算子出現在算式中,不能作為正負號。括號可以出現在算式最左和最右,例如 1 ...