Redis 基础数据结构(二)

1.String

字符串 string 是 Redis 最简单的数据结构。Redis 全部的数据结构都是以惟一的 key 字符串做为名称,而后经过这个惟一 key 值来获取相应的 value 数据。不一样类型的数据结构的差别就在于 value 的结构不同。

字符串结构使用最为普遍,最多见的就是缓存信息。通常状况下咱们是将这些信息使用JSON序列化成字符串,而后将序列化后的字符串塞进Redis进行缓存,一样,获取用户信息的时候是会进行一次反序列化的过程。缓存

字符串是由多个字节组成,每一个字节又是由 8 个 bit 组成,如此即可以将一个字符串当作不少 bit 的组合,这即是 bitmap「位图」数据结构。

Java中的字符串是常量,知道String pool的同窗应该很明白这句话的含义,但Redis 的字符串是动态字符串,是能够修改的字符串,内部结构实现上相似于 Java 的 ArrayList,采用预分配冗余空间的方式来减小内存的频繁分配,内部为当前字符串实际分配的空间 capacity 通常要高于实际字符串长度 len。当字符串长度小于 1M 时,扩容都是加倍现有的空间,若是超过 1M,扩容时一次只会多扩 1M 的空间。须要注意的是字符串最大长度为 512M。能够看到扩容机制和Java中的ArrayList有所不一样。数据结构

键值对:spa

127.0.0.1:6379> set name xiaoming
OK
127.0.0.1:6379> get name
"xiaoming"
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)

批量键值对:3d

127.0.0.1:6379> mset name1 xiaoming1 name2 xiaoming2
OK
127.0.0.1:6379> get name1
"xiaoming1"
127.0.0.1:6379> get name2
"xiaoming2"
127.0.0.1:6379> mget name1 name2
1) "xiaoming1"
2) "xiaoming2"

过时和set:code

127.0.0.1:6379> set myName xiaoming
OK
127.0.0.1:6379> get myName
"xiaoming"
127.0.0.1:6379> expire myName 5
(integer) 1
127.0.0.1:6379> get myName
(nil)
127.0.0.1:6379> setex myName1 5 xiaoming
OK
127.0.0.1:6379> get myName
(nil)
127.0.0.1:6379> setnx myName2 xiaoming
(integer) 1
127.0.0.1:6379> get myName2
"xiaoming"

计数:blog

127.0.0.1:6379> set age 30
OK
127.0.0.1:6379> get age
"30"
127.0.0.1:6379> incr age
(integer) 31
127.0.0.1:6379> get age
"31"
127.0.0.1:6379>
127.0.0.1:6379> incrby age 5
(integer) 36
127.0.0.1:6379> set age 9223372036854775807
OK
127.0.0.1:6379> incr age
(error) ERR increment or decrement would overflow