目录
redis有5种基础数据结构,分别是:字符串,列表,字典,集合,有序集合,接下来我们简单讲解下5种数据结构。
-
字符串(string)
-
常用命令如下
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379> get counter
"2"
127.0.0.1:6379> incr counter
(integer) 3
127.0.0.1:6379> get counter
"3"
127.0.0.1:6379> incrby counter 100
(integer) 103
127.0.0.1:6379> get counter
"103"
127.0.0.1:6379> decr counter
(integer) 102
127.0.0.1:6379> get counter
"102"
127.0.0.1:6379> mset boy name1 girlsname2
127.0.0.1:6379> mget boy girl
1) "name1"
2) "name2"
-
基本组成
redis字符串是由简单动态字符串组成(simple dynamic string,SDS)
-
列表(List)
-
常用命令
#队列:右进左出
127.0.0.1:6379> rpush IT python java go js
(integer) 4
127.0.0.1:6379> llen IT
(integer) 4
127.0.0.1:6379> lpop IT
"python"
127.0.0.1:6379> lpop IT
"java"
127.0.0.1:6379> lpop IT
"go"
127.0.0.1:6379> lpop IT
(nil)
#栈:右进右出
127.0.0.1:6379> rpush IT python java go js
(integer) 4
127.0.0.1:6379> rpop IT
"python"
127.0.0.1:6379> rpop IT
"java"
127.0.0.1:6379> rpop IT
"go"
127.0.0.1:6379> rpop IT
(nil)
#根据下标取值
127.0.0.1:6379> rpush IT python java go js
(integer) 4
127.0.0.1:6379> lindex IT 1
"java"
#根据范围取
127.0.0.1:6379> lrange IT 0 -1
1)"python"
2)"java"
3)"go"
4)"js"
-
基本组成:
列表底层是由链表(linkedlist)和压缩列表(ziplist)组成(后面是由quicklist组成),链表和压缩列表二者怎么切换的呢?当满足以下两点用压缩列表,否则用链表:
1-列表对象保存的所有字符串元素的长度都小于 64
字节;
2-列表对象保存的元素数量小于 512
个;
-
字典(hash):
-
常用命令:
127.0.0.1:6379> hset boy name lj
(integer) 1
127.0.0.1:6379> hset boy email [email protected]
(integer) 1
127.0.0.1:6379> hgetall boy
1) "name"
2) "lj"
3) "email"
4) "[email protected]"
127.0.0.1:6379> hget boy user
(nil)
127.0.0.1:6379> hget boy name
"lj"
-
基本组成:
字典是由压缩列表(ziplist)和hashtable组成,hashtable和压缩列表二者怎么切换的呢?当满足以下两点用压缩列表,否则用hashtable:
1-哈希对象保存的所有键值对的键和值的字符串长度都小于 64
字节;
2-哈希对象保存的键值对数量小于 512
个
-
集合(set):
-
常用命令:
127.0.0.1:6379> sadd name tom jack
(integer) 3
127.0.0.1:6379> SMEMBERS name #set是无序的,插入顺序和查询顺序并不一致
1) "jack"
2) "tom"
127.0.0.1:6379> SISMEMBER name
(integer) 1
127.0.0.1:6379>scard name
(integer) 2
127.0.0.1:6379>spop name
"tom"
-
基本组成:
集合是由整数集合(intset)和hashtable组成,hashtable和整数集合二者怎么切换的呢?当满足以下两点用整数集合,否则用hashtable:
1-集合对象保存的所有元素都是整数值;
2-集合对象保存的元素数量不超过 512
个;
-
有序集合(zset):
-
常用命令:
127.0.0.1:6379> zadd myscoreset 100 hao 90 xiaohao
(integer) 2
127.0.0.1:6379> ZRANGE myscoreset 0 -1
1) "xiaohao"
2) "hao"
127.0.0.1:6379> ZSCORE myscoreset hao
"100"
-
基本组成
有序集合底层是由跳跃表(skiplist)和压缩列表(ziplist)组成,跳跃表和压缩列表二者怎么切换的呢?当满足以下两点用压缩列表,否则用跳跃表:
1-有序集合保存的元素数量小于 128
个;
2-有序集合保存的所有元素成员的长度都小于 64
字节;
推荐阅读
redis学习笔记之数据结构-----skiplist(跳跃表)
redis学习笔记之数据结构-----zipset(压缩列表),intset(整数集合),listpack(紧凑列表)