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有所不同。

键值对:

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)

批量键值对:

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:

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"

计数:

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

 



 

posted @ 2018-12-02 14:07  yangfei969  阅读(249)  评论(0编辑  收藏  举报