抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

文章已收录Github精选,欢迎Starhttps://github.com/yehongzhi

前言

Redis是一个开源的使用C语言编写、支持网络、可基于内存可持久化的日志型、Key-Value的NoSQL数据库。

一般来说,我们都是使用关系型数据库MySQL来存储数据,但是面对着流量高峰,会对MySQL造成巨大的压力,导致数据库性能很差,这时就要使用缓存中间件来降低数据库的压力,这是Redis最常见的使用场景。除了作为缓存使用之外,Redis还有很多使用场景,比如分布式锁,计数,队列等等。

所以Redis对于程序员来说可以算得上是必修课。

安装Redis

安装Redis很简单,因为网上教程很多,这里就不再详细讲解,推荐看菜鸟教程:https://www.runoob.com/redis/redis-install.html

Redis的特点

要用好Redis,首先要明白它的特点:

  • 读写速度快。redis官网测试读写能到10万左右每秒。速度快的原因这里简单说一下,第一是因为数据存储在内存中,我们知道机器访问内存的速度是远远大于访问磁盘的,其次是Redis采用单线程的架构,避免了上下文的切换和多线程带来的竞争,也就不存在加锁释放锁的操作,减少了CPU的消耗,第三点是采用了非阻塞IO多路复用机制
  • 数据结构丰富。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构。这也是这篇文章要讲的。
  • 支持持久化。Redis提供了RDB和AOF两种持久化策略,能最大限度地保证Redis服务器宕机重启后数据不会丢失。
  • 支持高可用。可以使用主从复制,并且提供哨兵机制,保证服务器的高可用。
  • 客户端语言多。因为Redis受到社区和各大公司的广泛认可,所以客户端语言涵盖了所有的主流编程语言,比如Java,C,C++,PHP,NodeJS等等。

Redis的数据结构

下面我们就学习Redis的数据结构,也是使用Redis要知道的最基础的知识。

Redis是一个Key-Value型的内存数据库,它所有的key都是字符串,而value常见的数据类型有五种:string,list,set,zset,hash。

Redis的这些数据结构,在底层都是使用redisObject来进行表示。redisObject中有三个重要的属性,分别是type、 encoding 和 ptr

type表示保存的value的类型。通常有以下几种,也就是常见的五种数据结构:

  • 字符串 REDIS_STRING
  • 列表 REDIS_LIST
  • 集合 REDIS_SET
  • 有序集合 REDIS_ZSET
  • 字典 REDIS_HASH

encoding表示保存的value的编码,通常有以下几种:

1
2
3
4
5
6
7
8
#define REDIS_ENCODING_RAW 0            // 编码为字符串
#define REDIS_ENCODING_INT 1 // 编码为整数
#define REDIS_ENCODING_HT 2 // 编码为哈希表
#define REDIS_ENCODING_ZIPMAP 3 // 编码为 zipmap
#define REDIS_ENCODING_LINKEDLIST 4 // 编码为双端链表
#define REDIS_ENCODING_ZIPLIST 5 // 编码为压缩列表
#define REDIS_ENCODING_INTSET 6 // 编码为整数集合
#define REDIS_ENCODING_SKIPLIST 7 // 编码为跳跃表

ptr是一个指针,指向实际保存的value的数据结构。

这里要特别说明一下的是,数据类型和编码方式是有一定关系的,所以数据类型和编码方式是可以确定底层采用什么数据结构存储数据的。