每个程序员都应该知道的Redis知识

274 阅读3分钟

本文将介绍如下内容:

  • Redis数据类型
  • Redis和Memcache的区别
  • Redis中使用的数据结构

在遥远的Web1.0时代,Web站点主要的架构是Apache + PHP + MySQL方式,因为在当时这种架构足以支撑当时的访问量。但是随着互联网技术的普及,互联网用呈现指数型增长,这时候Web1.0时的架构就很难支撑。于是就出现了负载均衡、NoSQL等技术,而Redis数据库就是NoSQL的其中一种。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

一、Redis的数据类型

Redis常见的据类型有String、Hash、List、Set、Sorted Set 五种,每种数据类型都有其具体的使用场景。各种类型的底层实现也是基于现有的数据结构来实现的,这一点将在后面为大家介绍。下面将逐一介绍每种类型:

**①String类型,即字符串类型。**主要用于存储字符串类型的数据。具体的API可以参考Redis提供的文档。单存就String来说,和Memcache的作用类似。Redis的String类型底层实现是在C语言的String类型的基础上做了一层封装。为什么要再做一层封装呢?是因为Redis的定位是缓存,所以重新封装一层是为了实现更高的效率,同时也可以实现二进制安全。(具体怎么实现高效的,等我下一篇文章来详细介绍)

**②Hash类型,即哈希类型。**这种类型可以存储字典类型的数据,比如说存储用户信息时,用户名、密码和手机号,存储的时候不用json_encode成字符串再存储,可以直接存储成Hash类型

**③List类型,即链表类型。**这种类型可以实现消息队列、排行榜等功能。

**④Set类型,即集合类型。**这种类型可以计算交集、并集、差集等。比如计算两个好友的公共好友,就可以通过计算两个集合的交集来实现。

**⑤Sorted Set类型,即有序集合类型。**这种类型可以实现延迟队列、可以统计某个时间段的活跃用户等。

二、Redis和Memcache的区别

数据类型方面

  • Redis 支持更多的数据类型,例如Hash、Set、List等类型
  • Memcache支持简单数据类型,需要客户端自己处理复杂对象

持久性方面

  • Redis 支持数据落地持久化存储(细节后面文章会详细介绍)
  • Memcache 不支持数据持久存储

分布式存储

  • Redis 支持master-slave复制模式
  • Memcache 可以使用一致性hash做分布式

数据一致性不同

  • Redis 使用的是单线程模型,保证了数据按顺序提交。
  • Memcache需要使用cas保证数据一致性。

CPU利用

redis单线程模型只能使用一个cpu,可以开启多个redis进程。

三、Redis中使用的数据结构

Redis各种数据类型之所以操作起来非常高效,是因为底层做了非常好的封装,运用并优化了很多数据结构。比如说String类型是封装了一个SDS结构,不仅二进制安全,而且查询起来效率非常高,这就是我们常说的以空间换时间的思想。

Redis中的Hash类型的实现是以哈希表作为底层实现。

除此之外还用到了跳跃表、压缩列表等数据结构,这些我将在后面的文章会详细介绍。

如果要想彻底搞懂Redis的底层实现,还是需要非常扎实的数据结构方面的知识。

最后给大家推荐一本书《Redis设计与实现》,介绍了Redis的数据类型的实现方式,以及各种类型底层的实现原理。