Redis有5种基础数据结构,分别为 string(字符串)、list(列表)、hash(字典)、set(集合)和zset(有序集合)。这五种基本数据结构的熟练使用,是Redis的相关知识中最基础、最重要的部分
string
字符串string是Redis最简单的数据结构,如图所示,它的内部表示就是一个字符数组。Redis所有的数据结构都以唯一的key字符串作为名字,然后通过这个唯一key值来获取相应的value数据.不同类型的数据结构的差异就在于value的结构不一样
Redis的字符串是动态字符串,是可以修改的字符串,内部结构的实现类似于Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。即: 为当前字符串分配的实际空间 一般要高于实际字符串长度。
当字符串小于1MB时,扩容都是加倍现有的空间。如果字符串长度超过1MB,扩容时一次只会多扩1MB的空间。需要注意的是字符串最大长度为512MB
【键值对】
D:\Program Files\Redis>redis-cli.exe -h 127.0.0.1 -p 6379
127.0.0.1:6379> set name "helloworld"
OK
127.0.0.1:6379> get name
"helloworld"
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 boy name2 girl name3 unkown
OK
127.0.0.1:6379> mget name1 name2 name3
1) "boy"
2) "girl"
3) "unkown"
【过期和set命令拓展】
可以对key设置过期时间,到时间会被自动删除。这个功能常用来控制缓存的实效时间。这里只简单说下,后面章节再深入了解
127.0.0.1:6379> expire name1 5 #5s后过期
(integer) 1
127.0.0.1:6379> setex name 5 codehole #5s后过期 等价于set+expire
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> setnx name codehole #如果name不存在,则执行set创建
(integer) 1
127.0.0.1:6379> setnx name holycoder #如果name已经存在,则不执行操作
(integer) 0
127.0.0.1:6379> get name
"codehole" #没有改变
【计数】
如果value值是一个整数,还可以对它进行自增操作。自增是有范围的,它的范围在signed long的最大值和最小值之间,如果超出了这个范围,Redis会报错
127.0.0.1:6379> set age 30
OK
127.0.0.1:6379> incr age
(integer) 31
127.0.0.1:6379> incrby age 5
(integer) 36
127.0.0.1:6379> incrby age -1
(integer) 35