page contents

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

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

attachments-2020-08-5RBXCbM75f3f80677ad75.jpg

本文将介绍如下内容:

Redis数据类型

Redis和Memcache的区别

Redis中使用的数据结构

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

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


01、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类型,即有序集合类型。这种类型可以实现延迟队列、可以统计某个时间段的活跃用户等


02、Redis和Memcache的区别

数据类型方面

Redis 支持更多的数据类型,例如Hash、Set、List等类型

Memcache支持简单数据类型,需要客户端自己处理复杂对象

持久性方面

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

Memcache 不支持数据持久存储

分布式存储

Redis 支持master-slave复制模式

Memcache 可以使用一致性hash做分布式

数据一致性不同

Redis 使用的是单线程模型,保证了数据按顺序提交。

Memcache需要使用cas保证数据一致性。

CPU利用

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


03、Redis中使用的数据结构

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

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

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

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

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


attachments-2020-08-Fmobzhk55f3f81651f573.jpg

  • 发表于 2020-08-21 09:21
  • 阅读 ( 666 )
  • 分类:分布式

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1135 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章