Redis缓存雪崩、缓存穿透、缓存击穿、分布式锁及Redis概念复习笔记

本文的复习偏向于概念,没有过多代码的演示

一、NoSQL

1.什么是NoSQL

  • Nosql泛指非关系型的数据库,它的产生是为了解决大规模数据集合、多重数据种类带来的挑战,尤其是大数据应用难题;
  • 区别于传统的关系型数据库,Nosql不保证关系数据的ACID特性。

2.为什么要使用NoSQL

  • 因为现在的网站具有下面的特点与需求:
    • 高并发读写
      • Web2.0网站数据库并发负载非常高,往往达到每秒上万次的读写请求
    • 高容量存储和高效存储
      • Web2.0网站通常需要在后台数据库中存储海量数据,如何存储海量数据并高效查询是一个挑战
    • 高扩展性和高可用性
      • 随着系统的用户量和访问量与日俱增,需要数据库能够很方便的进行扩展和维护

3.NoSQL数据库的优势

  • 易扩展
    • 数据之间无关系,非常容易扩展,在架构的层面上也有可扩展能力。
  • 大数据量,高性能
    • NoSQL数据库具有非常高的读写性能,主要得益于它的无关系性,数据库的结构简单。
  • 灵活的数据结构
    • 无需建立字段,可以存储自定义的数据格式。
  • 高可用
    • NoSQL在不太影响性能的情况下,可以方便的实现高可用的框架。

4.常见的NoSQL产品

 二、Redis

1.简介

  • 全称:REmote Dictionary Server(远程字典服务器)
  • 完全免费开源,用c语言编写,是一个高性能的分布式内存数据库。(key/value)

2.Redis与其他key-value缓存产品的比较

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载使用;
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list、set、zset、hash等数据结构的存储;
  • Redis支持数据的备份,即master-slave(主从)模式的数据备份

3.Redis的优势

  • 性能极高,Redis读的速度是110000次/s,写的速度是81000次/s;
  • 具有丰富的数据类型,Redis支持二进制案例的Strings、Lists、Hashes、Sets及Ordered Sets数据类型操作;
  • 原子性:Redis的所有操作都是原子性的,而且还支持对几个操作合并后的原子性执行;
  • 丰富的特性:Redis还支持publish/subscribe(发布订阅模式)、key过期等等特性;
  • 采用单线程,避免了不必要的上下文切换和线程竞争,不存在多进程或者多线程导致的切换而消耗CPU,不用考虑锁的相关问题,也不会因为出现死锁而导致的性能消耗;
  • 使用多路I/O复用模型,非阻塞IO;

4.Redis的应用场景

(1) 缓存(数据查询,短连接,新闻内容,商品内容等),使用最多
(2) 聊天室在线好友列表
(3) 任务队列(秒杀,抢购,12306等)
(4) 应用排行榜
(5) 网站访问统计
(6) 数据过期处理(可以精确到毫秒)
(7) 分布式集群架构中的session问题
 

三、Redis的数据结构

  • Redis是一种基于内存的数据库,并且提供一定的持久化功能,是一种键值(key-value)数据库,使用key作为索引找到当前缓存的数据,并且返回给程序调用者
  • Redis支持6种数据类型,重点掌握前五种
    • 字符串(String)
    • 列表(List)
    • 集合(Set)
    • 哈希结构(hash)
    • 有序集合(zset)
    • 基数(HyperLogLog)
      • 基数指的是一个集合中不重复的元素的个数
  • 表格描述

数据类型

数据类型存储的值

说明

String(字符串)

可以保存字符串、整数和浮点数

可以对字符串进行操作,比如增加字符或求子串;如果是整数或浮点数,可以实现计算,比如自增等

List(列表)

是一个链表,每一个节点都包含一个字符串

Redis支持从链表的两端插入或者 弹出节点,或者通过偏移对它进行裁剪;还可以读取一个或多个节点,根据条件删除或查找节点等

Set(集合)

它是一个收集器,但是是无序的,在它里面的每一个元素都是一个字符串,而且是独一无二的,和java的set集合很像

可以新增、读取、删除单个元素;检测一个元素是否在集合中;计算它和其他集合的交集、并集和差集等;随机从集合中读取元素

Hash(哈希散列表)

类似java中的Map,是一个键值对应的无序列表

可以增删改查单个键值对,也可以获取所有的键值对

Zset(有序集合)

是一个有序的集合,可以包含字符串、整数、浮点数、分值(score),元素的排序是依据分值的大小来决定的

可以增删改查元素,根据分值的范围或者成员来获取对应的元素

HyperLogLog(基数)

它的作用是计算重复的值,以确定存储的数量

只提供基数的运算,不提供返回的功能

四、Redis的事务管理

  • Redis的事务可以一次执行多个命令,并且带有以下两个重要的保证
    • 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中不会被其他客户端发来的命令请求所打断。
    • 事务是一个原子操作:事务中的命令要么全部执行,要么全部不执行
  • 一个事务从开始到执行会经历下面三个阶段
    • 开始事务
    • 命令入队
    • 执行事务
  • Redis中以multi命令开始一个事务,将多个命令入队到事务中,最后由exec命令触发事务,一并执行事务中的所有指令
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set u1 user1
QUEUED
127.0.0.1:6379> get u1
QUEUED
127.0.0.1:6379> sadd tag c++ html java
QUEUED
127.0.0.1:6379> smembers tag
QUEUED
127.0.0.1:6379> exec
1) OK
2) "user1"
3) (integer) 3
4) 1) "java"
2) "html"
3) "c++"

五、Redis的发布订阅模式

  • Redis发布订阅(pub/sub)是一种消息模式,发送者(pub)发送消息,订阅者࿰
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值