【Redis深度历险】那些年Redis的数据结构
Redis端口号6379的来源
Redis的端口号是6379,但这个端口号并不是随机选择的,源于"MERZ",这个单词在手机当中的对应数字就是6379。"MERZ"在Redis作者Antirez的好友圈当中代表愚蠢的意思。
数据结构
Redis的key只能是字符串,value可以是String,Hash,List,Sorted Set(Zset)。
String
Redis的字符串是动态字符串(SDS Simple Dynamic String ),内部结构有点儿类似于java的ArrayList,都是采取预分配来减少内存的频繁扩容。如图len是实际字符串的长度,capacity是预分配的空间(数组容量)。创建字符串时,len和capacity一样长,使用字节数组存放内容。
struct SDS<T> { T capacity; // 数组容量 T len; // 数组长度 byte flags; // 特殊标识位 byte[] content; // 数组内容 }
- 如果在1M以内,都是加倍扩充容量
- 如果超过1M则,每次扩容1M
- 字符串的最大容量是512M
String的一些基础操作
- 普通get set
127.0.0.1:6379> set name amber OK 127.0.0.1:6379> get name "amber" 127.0.0.1:6379> exists name (integer) 1 127.0.0.1:6379> del name (integer) 1 127.0.0.1:6379> get name (nil) 127.0.0.1:6379>
- 批量mset,mget
127.0.0.1:6379> set name amber OK 127.0.0.1:6379> set name2 nick OK 127.0.0.1:6379> mget name name2 1) "amber" 2) "nick" 127.0.0.1:6379> mset name3 wade name4 hellen OK 127.0.0.1:6379> mget name name2 name3 name4 1) "amber" 2) "nick" 3) "