如何知道redis中特定键的大小(以KB为单位)?
我知道info memory
命令,但它给出了Redis实例的组合大小,而不是单个密钥。
答案 0 :(得分:3)
您目前(v2.8.23& v3.0.5)不能。
来自serializedlength
的{{1}}(由@Kumar建议)并不表示该值在RAM中的真实大小 - Redis一方面使用多个“技巧”来保存在RAM上另一方面,您还需要考虑数据结构的开销(也许还有一些Redis的全局字典)。
好消息是OSS项目中有关于这个主题的讨论,未来内存反省可能会有很大的改进。
注意:我开始(并暂时停止)关于该主题的系列文章 - 这是第一部分:https://redislabs.com/blog/redis-ram-ramifications-i
答案 1 :(得分:2)
我知道这是一个古老的问题,但是为了记录起见,Redis从版本 4.0.0 开始实施了# Transform index of df_a to series for mapping
a_idx = df_a.index.to_series()
# Condition that df_a's index is in df_b
idx_in = a_idx.isin(df_b.index)
# map df_a's index to the df_b groups
mapped = a_idx.map(df_b.Group)
# apply np.select on your conditions:
conds = [(idx_in) & (mapped == 'O'),
(idx_in) & (mapped == 'I')]
choices = [5,3]
df_a['Actioncode'] = np.select(conds,choices, df_a.Actioncode)
>>> df_a
Actioncode Group
Mary 1.0 I
Paul 5.0 I
Robert 3.0 O
David 4.0 O
Julia 4.0 O
命令。
输出是将密钥存储在RAM中所需的字节数量。
答案 2 :(得分:1)
alphabetL = 'abcdefghijklmnopqrstuvwxyz'
alphabetC = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
number = '0123456789'
space = ' '
Ll = len(alphabetL)
Lc = len(alphabetC)
Ln = len(number)
Lall = Ll + Lc + Ln
Question1 = input('Hello, please insert the message you want encrypted: ')
key1 = input('Please insert the key you want used [Keep between 1 and 26]: ')
cipher = ''
cipher2 = ''
for A in Question1:
if A in alphabetL:
cipher += alphabetL[(alphabetL.index(A)+key1)%Ll]
elif A in alphabetC:
cipher += alphabetC[(alphabetC.index(A)+key1)%Lc]
elif A in number:
cipher += number[(number.index(A)+key1)%Ln]
elif A in space:
cipher += space
else:
print ('Error, please use abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
print (cipher)
显示类似DEBUG OBJECT <key>
的密钥,这实际上是我正在寻找的东西......对于整个数据库,您需要聚合KEYS *的所有值,这些值不应该是使用您选择的脚本语言太过分了......糟糕的是redis.io并没有真正掌握DEBUG OBJECT的大量信息。
答案 3 :(得分:0)
如果你只想获得一个键的长度(字符串):STRLEN
答案 4 :(得分:-1)
为什么不试试
APPEND {your-key}“”
这将不会向现有值附加任何内容,但会返回当前长度。