自顶向下理解Redis

概述

任何技术的产生都是为了解决某些问题。
随着IO的不断增加,使用关系型数据库的网站多多少少都遇到了瓶颈,而这瓶颈大多数都是在物理磁盘的I/O上。随着互联网的不断发展,业务需求的多样化,Web的考验急剧增大,对技术的要求是越来越高。为了解决问题,MySQL不断优化,但仍旧遇到新的问题。
Redis(remote directory service)远程字典服务。

场景

首先这是一个数据库,那数据库必须提供读写能力,和读写同步机制。首先分析他是如何进行写操作的,内存是如何组织的,接着分析如何提供读写同步机制。

数据结构

redis

高级数据结构

底层数据结构

读写同步

事务支持

事务是解决数据安全性
还是用经典的银行转帐来做说明,用户a要给用户b转一笔款,正确的执行流程是a账户减少指定金额,b账户增加指定金额。这两个动作要么同时执行,要么都不执行才能保证数据的准确性,以保证数据一致。 标准数据库有的特性,Redis自然要有的。 一般来说事务包括begin(), commit(), rollback(),

begin();
try:
   command1();
   command2();
   commit()
 catch Exception:
   rollback()

redis的实现, MULTI即使将后面的任务放到一个队列,原子顺序执行的

127.0.0.1:6379> set user:a:quota 100
OK
127.0.0.1:6379> set user:b:quota 100
OK
#执行转帐事务:a减掉20 b增加20
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> DECRBY user:a:quota 20
QUEUED
127.0.0.1:6379> INCRBY user:b:quota 20
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 80
2) (integer) 120

出现失败场景主要有两类

  1. EXEC之前的错误,命令会入队后失败,如果成功会返回QUEUED,对于入队失败的,EXEC会自动拒绝这些任务
  2. EXEC之后的错误,命令会继续执行

也就是说Redis不支持事务回滚。

网络模型

既然是一个KV存储数据库服务器,那到底层网络模型和线程模型是如何组织的

出现
1、纯内存数据库
2、存储数据类型、方式
3、持久化
3、大规模数据插入优化
4、性能,如何优化
5、分片
6、二级索引
7、分布式锁
8、事务
9、客户端
10、LRU

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值