一.Redis入门指南总结--认识Redis

一.Redis简介

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库,Redis对数据的操作都是原子性的。
Redis 与其他 key - value 缓存产品有以下三个特点:

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

二.Redis的优缺点

优点

1.基于内存操作,内存读写速度快。
2.Redis是单线程的,避免线程切换开销及多线程的竞争问题。单线程是指在处理网络请求(一个或多个客户端连接)的时候只有一个线程来处理,redis在运行时不止有一个线程,数据持久化或者slave同步时会另起线程
3.支持数据持久化,两种模式RDB和AOF,能有效避免数据丢失。RDB类似于mysql dump快照,aof则类似于mysql binlog。
4.支持多种数据类型,包括String、Hash、List、set、zset等。
5.采用网络IO多路复用技术来保证在多连接的时候,系统吞吐量高。多路指的是多个socket连接,复用指复用一个线程。多路复用主要有三种技术:select、poll、epoll。epoll是目前最好的多路复用技术。
6.支持事务。

缺点

1.数据存储在内存中,主机断电,持久化不及时,有导致数据丢失的风险。
2.存储容量受到物理内存的限制。
3.在线扩容比较困难,系统上线时必须保证足够的空间。
4.用于缓存,可能导致缓存雪崩、缓存击穿的问题。

三. 应用场景

1.缓存:缓存热点数据,减少访问响应时间,也是开发中最常用的。
2.实时防止系统被攻击:防止被暴力破解,可以记录同一IP地址在某一时间段访问多少次,超过多少次直接锁定IP,加入黑名单。
3.设置验证码过期时间:赋值时设置过期时间。
4.自动去重:使用redis的set数据结构,自动排重。
5.计数器:利用Redis中原子性的自增操作,可以用使用实现计数器的功能,比如统计用户点赞数、用户访问数等,这类操作如果用MySQL,频繁的读写会带来相当大的压力。
6.秒杀:将名额放进内存队列(redis),内存就能处理高并发访问。
7.简单消息队列:不要求高可靠的情况下,可以使用Redis自身发布的Pub/Sub 系统或者list来实现一个队列,实现异步操作。
7.好友关系:利用集合的一些命令,比如求交集、并集、差集等。可以方便搞定一些共同好友、共同爱好之类的功能。

四.Redis和mysql比较

在这里插入图片描述

五.Redis的线程模型

redis内部使用文件事件处理器,它的文件处理器是单线程的,所以redis才叫做单线程的模型。采用IO多路复用机制同时监听多个cocket,将产生事件的socket压入内存队列中,事件分派器根据socket上的事件类型来 选择对应的事件处理器进行处理。
文件事件处理器包含四个部分
1.多个socket
2.IO多路复用程序
3.文件事件分派器
4.事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)
多个socket可能会并发产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个socket,会将产生事件的socket放入队列中排队,事件分派器每次从队列中取出一个socket,根据socket的事件类型交给对应的事件处理器进行处理。
一次通信
在这里插入图片描述
通信是通过socket完成。
1.首先,redis服务端进程在初始化的时候,会将server socket的AE_READABLE事件与连接应答器相关联。
2.客户端client socket01 向redis进程的socket server发出建立连接的请求,次数socket server会产生一个AE_READABLE事件,IO多路复用程序监听到socket server产生的事件后,会将socket压入队列中,文件事件分派器获取到socket,将其分派给连接应答处理器。连接应答处理器会创建一个与客户端通信的socket01,并且将该socket01的AE_READABLE事件与命令处理器相关联。
3.假设此时client socket01发出一个set key value命令,此时redis中的socket01会产生一个AE_READABLE事件,IO多路复用程序监听到,将其压入队列中,文件事件分派器获取到队列中的socket01事件,将其交给命令请求处理器,命令请求处理器读取到socket01的key value并在自己的内存中完成key value的设置,操作完成后,它会将socket01的AE_WRITABLE事件与命令回复器相关联。
4.如果客户端已经准备好接收返回结果了,那么redis中的socket01会产生一个AE_WRITABLE事件,同样压入队列中,事件分派器找到相关联的命令回复处理器,由命令回复处理器对socket01输入本次操作的一个结果。比如OK,之后解除socket01的AE_WRITABLE事件与命令回复处理器的关联。

六.Redis和memcached的区别

相同点
1.都是基于内存的数据库,一般都当作缓存来使用
2.都有过期策略
不同点
1.Redis支持的数据类型更加丰富(String,Hash,List、set、zset),而memcached只支持key-value的数据类型
2.Redis支持持久化,memcached不支持持久化
3.Redis原生支持集群模式,memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据
4.Redis支持发布订阅模型、Lua脚本、事务等功能,memcached不支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值