redis初认识

195 阅读3分钟

redis初识

天天听着后端同事们redis啊、mq啊、spring系列啊、DDD啊、怎么怎么建表、怎么怎么设计,听个皮毛。最近有幸听redis的技术分享,记下来,初次认识。

什么是redis

1、redis是一种非关系型数据库(nospl),

  • 扩展(三大常见nospl-个人片面认识-以后多补充理解)

Redis

优点:

  • 支持多种数据结构,啥字符串啊,双向链表啊,哈希表啊,集合与有序集合啊等等,其他我也不认、、、
  • 持久化(RDB、AOF),数据表与(指令信息同步)日志的倒回。双写一致(redis和mysql中数据的一致性) 缺点:
  • Redis使用单线程,性能看cpu

Memcache

优点:

  • Memcached可以利用多核优势,吞吐量高 缺点:
  • 只有键值对key、value的数据结构,缺少其他数据类型
  • 数据无法很好的持久保存

MongoDB

优点:

  • 插入快,查询丰富,负载高,适合大数据量存储和高访问 缺点:
  • 不支持事务

为什么使用redis、应用场景

1、性能与并发(+分布式体系)

性能

内存和磁盘(你是打开一个内存中的应用快呢,还是打开一个磁盘中的应用快呢。人家内存子弹都上好了,你磁盘枪还没找到,我(内存)承认你(磁盘)比我大,但你没我快@_@)

并发

高并发的情况下,所有的请求直接访问数据库,DB顶不住。这个时候,就需要使用redis做一个缓冲操作,让请求先访问到redis,如果没有数据,在查询DB,并将DB查询出来的结果存储一份在redis中。

数据类型的应用场景

redis单线程为什么快

回想js,它也是单线程,它也挺快的,他们多多少少一个味道

1、内存中执行 2、单线程:上下文切换减少 3、非阻塞性IO流:多路复用与事件循环

常见问题

缓存雪崩、缓存击穿、缓存穿透

这三个问题结果都是一样:说白了就是大量请求,直接请求DB查询,DB它它它又顶不住了

雪崩

现象: 同一时间缓存大量失效,结果同上 解决:1、过期时间+随机数 2、双重存储更安全

击穿

现象: 一个高并发访问的缓存失效,结果同上 解决:1、永不过期 2、互斥锁(过会儿再来客官)

穿透

现象: 一直查询一个缓存中没有,数据库也没有的数据,结果同上 解决:1、拦截验参 2、定时失效 3、互斥锁(过会儿再来客官)

统一解决方案------加钱

双写一致

避免DB和缓存中数据不一致 解决方案:消息队列(失败了再来好吧)

数据库数据更新后,删除、更新对应缓存

还是有很多看不太懂的东西,以后多多理解-只会笑的提莫