Redis | 青训营笔记

76 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天

写在开头

本人是一个第一次参加字节青训营的学生,主要是简单记录一下自己学习的过程以及复习(详细的需要自己去看每天对应的课程),每天会发前一天课程的笔记或者是自己的思考

Redis是什么

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

  • 基于内存运行,性能高效
  • 支持分布式,理论上可以无限扩展
  • key-value存储系统
  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

相比于其他数据库类型,Redis具备的特点是:

  • C/S通讯模型
  • 单进程单线程模型
  • 丰富的数据类型
  • 操作具有原子性
  • 持久化
  • 高并发读写
  • 支持lua脚本

哪些大厂在使用Redis?

  • github
  • twitter
  • 微博
  • Stack Overflow
  • 阿里巴巴
  • 百度
  • 美团
  • 字节

Redis的应用场景有哪些?

Redis 的应用场景包括:缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统。

Redis的数据类型及主要特性

Redis提供的数据类型主要分为5种自有类型和一种自定义类型,这5种自有类型包括:String类型、哈希类型、列表类型、集合类型和顺序集合类型。

redis的几种数据类型

5 种基础数据结构:string (字符串)、list (列表)、set (集合)、hash (哈希) 和 zset (有序集合)。

String

动态可修改,容量capacity一般要高于实际长度len,当len小于1M时容量翻倍;超过1M时,增加1M的容量;最大长度为512M;如果value为整数,可以进行自增操作;可以用于:常规的计数操作,如文章数、粉丝数。

list

Redis 的列表相当于 Java 语言里面的 LinkedList;这意味着 list 的插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n);当列表弹出了最后一个元素之后,该数据结构自动被删除,内存被回收。
可以用于:粉丝列表、异步队列:把需要延后处理的数据序列化成字符串装进列表,另起线程进行轮询操作;比如记录用户浏览记录,根据记录进行相关内容的推荐的实现;另外可以通过push和pop进行头部/尾部进行增删,即可以为队列又可以为数组。

hash (字典)

Redis 的字典相当于 Java 语言里面的 HashMap,它是无序字典。内部实现结构上同 Java 的 HashMap 也是一致的,同样的数组 + 链表二维结构可以用于:存储部分变更信息,如用户信息(存放的是结构化的对象)。

set (集合)

Redis 的集合相当于 Java 语言里面的 HashSet;无序且自动去重,并提供判断某个成员是否存在集合中的接口;当集合中最后一个元素移除之后,数据结构自动删除,内存被回收。
可以用于:共同好友、二度好友等功能。

Zset(有序集合)

与set类似,Zset是有序的,并且提供给每个value设置score,代表value排序权重;内部实现为跳跃列表;zest集合中最后一个value被移除后,数据结构自动删除,内存被回收。
可以用于:学生与分数。