redis学习笔记之基本5种数据结构

目录

字符串(string)

常用命令如下

基本组成

列表(List)

常用命令

基本组成:

字典(hash):

 常用命令:

  基本组成:

集合(set):

   常用命令:

  基本组成:

有序集合(zset):

常用命令:

基本组成

推荐阅读

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官方文档

redis学习笔记之数据结构-----skiplist(跳跃表)

redis学习笔记之数据结构-----zipset(压缩列表),intset(整数集合),listpack(紧凑列表)

redis学习笔记之数据结构-----SDS(简单动态字符串)

redis学习笔记之数据结构-----dict(字典)

猜你喜欢

转载自blog.csdn.net/lin_keys/article/details/105882476