redis value最大值 Redis 原理篇

2021-10-14 01:12:30 字數 1863 閱讀 4882

位圖

用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 ...