浅入浅出redis

进入博客,随机搜了一个redis和mysql的区别,看了三五篇,竟是一模一样的 ‘ 原创 ’ ,于是写了一点,也是供自己复习的一个索引

文章目录

  • 功能
    • 数据库
      • redis和mysql
    • 缓存
      • redis和memcached
    • 消息代理
  • 使用场景
    • 解耦
    • 异步
      • 经典的老头烧水
    • 削峰
  • 数据类型

redis服务器本身是个多线程的,有发布–订阅、缓存、数据库等功能。每个功能都需要相应的线程去完成,但是它读写数据是单线程的。

单线程和多线程是分情况的

多线程适用情况:

  • 并发的执行多件事情
  • 有I/O操作时用多线程,因为整个程序如果是单线程的话,I/O操作会阻塞住,阻塞就得等待,等待cpu就是空闲的

而redis本身时没有I/O的,单线程时基于内存操作的,在数据读写这一个功能下,如果用多线程反而慢了,因为涉及到一个线程切换,线程调度,得浪费时间

默认端口号:6379

功能

数据库

(基于内存的),也有磁盘永久功能

​ 可以和mysql作比较

redis和mysql

​ 化身经典面试题:redis做数据库和mysql有什么区别?

Mysql(关系型数据库),存储的数据类型很少
大概分整数、字符串和日期),既然是关系型数据库(就有列和列之间得关系),就牵扯到表的设计,在存储数据之前得先把表设计好,符合第一范式、第二范式和第三范式;而后其再给表增加列时就很麻烦,容易数据冗余,不方便拓展

而Nosql(非关系型数据库)存储类型多样,存储方式多样(键值对、列存储、文档存储、图形数据库),而且nosql方便拓展(数据之间没有关系)不需要事先设计数据库,随取随用

nosql读写速度快,因为是存储在内存的,而且nosql的缓存记录级别是一种细粒度的,因为数据存储时一条一条的,性能会更高,而mysql牵扯到列与列的关系,表和表的关系

举例:如果你需要查一个人的成绩,mysql的话,你会先根据学号去匹配,然后去依次查相关对应的信息,而redis有键值对存储,直接对应的就是成绩。

缓存

​ 可以和memcached作比较

redis和memcached

​ 化身经典面试题:redis做缓存和memcached有什么区别?

首先大家最熟悉的,memcaahed是纯内存存储的,内存存储有个显著的特点就是读写速度快,但是数据伴随着一些突然事件而引起的程序终止运行而带符加有一定的生命周期,这也是内存存储的一个缺点;
redis支持两种磁盘持久化(RDB、AOF);

数据一致性问题
Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。

消息代理

(有发布–订阅机制)

​ 可以和其他消息队列中间件(MQ)作比较(高性能分布式中用的多),当然,redis主要功能不是做消息代理,所以这方面功能不急其他消息队列中间件。

​ 经典面试题:redis如何实现消息队列?
@这个太广不做具体说明

使用场景

消息队列中间件使用场景比较多,核心的有三个:解耦、异步、削峰;

解耦

降低代码的耦合性,反之的危害就是一块代码的修改会影响着另一块代码的使用,耦合性太高;

异步

先理解什么是异步?

经典的老头烧水

  • 必须主动看水煮沸了没,这期间啥事也不做(同步阻塞)
  • 必须主动看水煮沸了没,这期间可以做其他事,但是得时不时看水是否煮沸,没煮沸可以继续做其他事(同步非阻塞)
  • 这个水壶可以自动提醒老头,但是老头还是不放心,得等着水煮沸(异步阻塞)
  • 这个水浒可以自动提醒老头,老头这下放心了,可以做其他的事,水煮沸后提醒老头(异步非阻塞)
    重点理解这个同步异步,,阻塞和非阻塞

​ 异步的一个场景是生产者消费者问题,生产者往消息队列里边放数据,不必阻塞于等消费者拿到数据,只负责把数据放到消息队列,提醒消息队列有数据了。

削峰

类似于缓存的作用,数据流量在某个时刻巨大(比如11.11),这时候可以不必直接访问后台服务器,可以先放在消息队列里,由消息队列进行转发。

数据类型

mydis基本数据类型:
字符串(String)、哈希(Hash)、列表(List)、集合(Set)和带范围查询的排序集合(zSet)这五种基本数据类型和位图**、超日志地理空间索引合流三个特殊类型。

深入理解后会更新,谢谢支持

你可能感兴趣的:(redis,redis)