redis 快取設計 搜尋字首匹配

2022-03-17 05:41:15 字數 2044 閱讀 3903

錄入:

是將錄入字元的string 的各個char 的ascii碼轉為16進製制 在通過-拼接起來,通過zadd新增 score設定為0 則會通過value 16進製制進行排序

查詢

將查詢的字元轉換為16進製制通過-拼接 

start計算:通過匹配字元16進製制最後以為進1算出起始16進製制 再+g 包括所有起始範圍

end計算:通過匹配字元16進製制+g 包括所有範圍

然後zadd臨時加入到redis 預設通過value排序則將匹配字元大概包裹起來

然後通過2個臨時資料獲得rank  再根據起始和結zrank獲得資料 過濾掉多餘的 再講16進製制轉換為字元 返回

//

unicode編碼

private

string coding(string s)

string encoding =buffer.tostring();

return

encoding;

}//新增資料

public

long

add(jedis con, string member, string key)

/**

* unicode解碼 字元通過16進製制轉換為ascii碼 即可得到對應字元**

@param

s *

@return

*/private

string decoding(string s)

}return

buffer.tostring();

}/*** 16進製制

* 二進位制與16進製制對應 0-0 1-1 2-2 3-3 4-4 5-5- 6-6 7-7 8-8 9-9 10-a 11-b 12-c 13-d 14-e 15-f 16-g

*/private

static

final string valid_characters = "0123456789abcdefg";

private

string findprefixrange(string prefix) else

return

newstring;

}//查詢資料

public listfind(jedis con, string member, string key)

}listiterator

iterator =list.listiterator();

//這裡過濾多個成員新增前驅字串和後繼字串引起的不符合的資料

while

(iterator.hasnext())

else

}return

list;

}

public

static

void

main(string args)

throws

exception

auto_complete.add(conn, "我愛廣州", "test1");

auto_complete.add(conn, "我愛成都", "test1");

auto_complete.add(conn, "你好啊", "test1");

auto_complete.add(conn, "aaabbb", "test1");

auto_complete.add(conn, "ac", "test1");

auto_complete.add(conn, "01", "test1");

auto_complete.add(conn, "02", "test1");

auto_complete.add(conn, "11", "test1");

list

numbers = auto_complete.find(conn, "我愛成", "test1");

system.out.println(json.tojsonstring(numbers));

}

列印["我愛成都"]

redis清除指定字首快取

問題描述 由於線上使用的架構中經常會有快取系統,最常用的就是redis,但是很多時候線上的資料更新了 就希望能夠立馬去驗證,這時候快取就需要清除 問題解決 登入redis所在伺服器 確定需要清除快取的 埠號,如果有設定密碼,則需要確定密碼 確定redis是否設定了環境變數,能否直接執行,redis ...

Redis快取設計

策略 一致性維護成本 lru lrf fifo最差低 超時剔除 較差較低 主動更新強高 低一致性業務 最大記憶體和淘汰策略的方式,maxmemory policy 高一致性業務 超時剔除和主動更新 解決快取穿透 適用場景 維護成本 快取空物件 資料命中不高,資料頻繁變化實時性高 維護簡單,需要過多的...

redis 快取設計

1 快取穿透 查詢乙個不存在的key 資料,快取層和儲存層都不會命中,將導致不存在的資料每次請求都要到儲存層去查詢,失去快取保護db 的意義。解決方案 有很多種方法可以有效地解決快取穿透問題,最常見的則是採用布隆過濾器 不了解的可以看這裡 將所有可能存在的資料雜湊到乙個足夠大的bitmap中,乙個一...