一   基本概述、

(1)

redis基本命令的时间复杂度如下:

redis——基本概述、数据结构

可以看到,keys命令是一个比较重的命令,所以在开发环境中我们一般不使用(因为redis是单线程的,如果你keys一个一百万的命令,可能就会在这个命令上耗费10秒,那后面所有的命令都会需要等10秒钟)

(2)

下图是redis的数据结构与内部编码

redis——基本概述、数据结构

数据结构是对外呈现的,而数据结构的底层就是内部编码,可以看到,每个数据结构都有几个内部编码,这是为了优化,比如hash,当我们需要使用空间换取时间的话,我们就可以使用如ziplist的压缩结构,而当我的数据量不多,需要以时间换取空间的话,我们就可以使用hashtable的数据结构。

(3)

对于redis内部源码中,有一个redisObject的结构对象:

redis——基本概述、数据结构

(4)

单线程为什么这么快:

  1. 纯内存(主要原因)
  2. 非阻塞IO
  3. 避免线程切换和竞态消耗

单线程需要注意的几点是:

  • 一次只运行一条命名
  • 拒绝长(慢)命令:keys,flushall,flushdb,slow lua script,mutil/exec,operate big value(collection)
  • 有些命令不是单线程,如:fysnc file descriptor,close file descriptor

 

二  数据结构

 

2.1  字符串

字符串中的value可以是字符串,数字,二进制,甚至是json串。value最大大小限度是512MB

redis——基本概述、数据结构

字符串结构在缓存,技术器,分布式锁等场景使用。

 

2.2  hash

hash结构如下图所示

redis——基本概述、数据结构

redis——基本概述、数据结构

 

下面我们比较下使用字符串和hash来存储用户属性的优劣

1.字符串方式1

redis——基本概述、数据结构

2.字符串方式2

redis——基本概述、数据结构

3.hash方式

redis——基本概述、数据结构

三种方式的比较

redis——基本概述、数据结构

 

2.3  List

数据结构如下

redis——基本概述、数据结构

比如我们平时用的微博,里面有个按时间顺序排列的列表

redis——基本概述、数据结构

这个就是通过redis里面的list的结构来完成,我们把微博内容存在list里,当有人新发了微博,我们就将此条微博的内容放入list(LPUSH)

redis——基本概述、数据结构

 

2.4  set

数据结构如下

redis——基本概述、数据结构

集合不仅支持集合内的操作,还支持集合间的操作

 

2.5  zset(有序集合)

redis——基本概述、数据结构

有序集合可以用在排行榜

相关文章:

  • 2021-12-04
  • 2022-01-18
  • 2021-07-10
  • 2021-06-30
  • 2021-05-17
  • 2022-01-09
猜你喜欢
  • 2022-12-23
  • 2021-04-07
  • 2021-10-08
  • 2021-09-04
  • 2022-01-29
  • 2021-09-25
  • 2021-12-15
相关资源
相似解决方案