key设计
最大key为512MB
可读性和可管理性 : 以业务(或者数据库名)为前缀(防止key冲突),用冒号分割,比如user:class:1
简洁性 : 保证语义的前提下,控制key的长度
不要包含特殊字符 : 比如空格,换行,单双引号及其他转义字符
value设计
127.0.0.1:6379> incr num (integer) 1 127.0.0.1:6379> object encoding num "int" 127.0.0.1:6379> set a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa #redis3.xx 是33 OK 127.0.0.1:6379> strlen a (integer) 43 127.0.0.1:6379> object encoding a "embstr" 127.0.0.1:6379> set a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa OK 127.0.0.1:6379> strlen a (integer) 44 127.0.0.1:6379> object encoding a "embstr"
bigkey : string控制在10KB,hash、list、set、zset元素个数不要超过5000
bigkey发现
[root@localhost ~]# /usr/local/redis/bin/redis-cli --bigkeysScanning the entire keyspace to find biggest keys as well as
average sizes per key type. You can use -i 0.1 to sleep 0.1 sec
per 100 SCAN commands (not usually needed).
[00.00%] Biggest string found so far 'k3' with 2 bytes
-------- summary -------
Sampled 5 keys in the keyspace!
Total key length in bytes is 11 (avg len 2.20)Biggest string found 'k3' has 2 bytes
0 lists with 0 items (00.00% of keys, avg size 0.00)
0 hashs with 0 fields (00.00% of keys, avg size 0.00)
5 strings with 9 bytes (100.00% of keys, avg size 1.80)
0 streams with 0 entries (00.00% of keys, avg size 0.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
删除bigkey
UNLINK key [key ...] : 该命令和DEL
十分相似:删除指定的key(s),若key不存在则该key被跳过。但是,相比DEL
会产生阻塞,该命令会在另一个线程中回收内存,因此它是非阻塞的。 这也是该命令名字的由来:仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作
redis> SET key1 "Hello" "OK" redis> SET key2 "World" "OK" redis> UNLINK key1 key2 key3 (integer) 2 redis>
选择合理数据结构
需求 : picId= userId (100万)
-
全部string : set pic1 user1
-
一个hash : hset allPics pic1 user1 pic2 user2
-
若干个小hash : hset picId/100 picId%100 userId