Redis开发规范

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 --bigkeys

Scanning 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万)

  1.   全部string : set pic1 user1

  2.   一个hash : hset allPics pic1 user1 pic2 user2

  3.  若干个小hash : hset picId/100 picId%100 userId

原文地址:https://www.cnblogs.com/yhq-qhh/p/11123713.html