我很難理解如何通過redis使用二進制數據類型。我想要使用命令Redis和轉義二進制數據
set '{binary data}' 'Alex'
如果二進制數據實際上包含引號符號或/ r/n,該怎麼辦?我知道我可以逃避角色,但是有一個我需要逃避的角色正式名單?
我很難理解如何通過redis使用二進制數據類型。我想要使用命令Redis和轉義二進制數據
set '{binary data}' 'Alex'
如果二進制數據實際上包含引號符號或/ r/n,該怎麼辦?我知道我可以逃避角色,但是有一個我需要逃避的角色正式名單?
找到了答案:Redis的是說是安全的「二進制安全字符串」
您需要使用Base64編碼的二進制數據得到一個二進制安全的字符串。
Java convert bytes to binary safe string
至於你的問題,想管你Redis的文本命令到CLI,你可能想通過文件來獲得和逃避你單引號。
base64編碼會膨脹我的數據庫大小。我試圖在Redis中存儲一個48位長的MAC地址作爲密鑰,而不是它的十六進制寫ascii。能夠存儲爲原始二進制文件會將我的密鑰大小減半 – user1978109 2014-08-29 18:30:46
有什麼我需要爲redis轉義的字符列表? – user1978109 2014-08-29 21:11:45
我已經給你所有我知道的東西 – ControlAltDel 2014-08-29 22:06:33
我發現最好使用Redis協議來做到這一點,因爲可以在數據類型之前定義邊界。
沒有必要對數據本身做任何特殊的事情。所有Redis字符串都是二進制安全的。
你的問題涉及到redis-cli(這是一個非常好的redis客戶端,用於瞭解Redis,但由於使用和性能問題,幾乎從不會在生產中想要什麼)。
您的問題還涉及常見(bash/sh/other)終端轉義。 Here是一個很好的解釋。
我建議你使用python這個,或任何其他你熟悉的語言。
實施例:
import redis
cli=redis.Redis('localhost', 6379)
with open('data.txt','rb') as f:
for d in f:
t = d.partition('\t')
cli.set(t[0], t[2].rstrip())
#EOF
可以作爲散裝字符串數組到Redis的發送命令,無需轉義字符或Base64編碼。因爲散裝字符串與數據長度開始,Redis的不嘗試解析數據字節和而不只是跳到最終驗證終端CR/LF對:
*3<crlf>
$3<crlf>SET<crlf>
${binary_key_length}<crlf>{binary_key_data}<crlf>
${binary_data_length}<crlf>{binary_data}<crlf>
任意字節可使用在redis-cli
輸入十六進制表示法,例如
set "\x00\xAB\x20" "some value"
FastoNoSQL和FastoRedis可以處理二進制鍵沒有逃脫。
你是指從命令行還是? – ControlAltDel 2014-08-29 17:43:22
我正在用cat data.txt |進行批量插入redis-cli - 管道。我在文本文件中有這個命令。 – user1978109 2014-08-29 17:45:31