文章目录
- 1.NoSQL数据库
- 1.1NoSQL适用场景
- 1.2常用的NoSQL
- 1.3Redis介绍
- 1.4Redis的使用场景
- 1.5Redis默认按照目录
- 1.6Redis的启动
- 1.7Redis是单线程+多路IO复用技术
1.NoSQL数据库
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。 NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。
1.1NoSQL适用场景
- 对数据高并发的读写
- 海量数据的读写
- 对数据高可扩展性的
1.2常用的NoSQL
Memcache
- 很早出现的NoSql数据库
- 数据都在内存中,一般不持久化
- 支持简单的key-value模式,支持类型单一
- 一般是作为缓存数据库辅助持久化的数据库
Redis
- 几乎覆盖了Memcached的绝大部分功能
- 数据都在内存中,支持持久化,主要用作备份恢复
- 除了支持简单的key-value模式,还支持多种数据结构的存储,比如 list、set、hash、zset等。
- 一般是作为缓存数据库辅助持久化的数据库
MongDB
- 高性能、开源、模式自由(schema free)的文档型数据库
- 数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘
- 虽然是key-value模式,但是对value(尤其是json)提供了丰富的查询功能
- 支持二进制数据及大型对象
- 可以根据数据的特点替代RDBMS ,成为独立的数据库。或者配合RDBMS,存储特定的数据。
1.3Redis介绍
Redis是一个开源的key_value存储系统。和Memcached类似,它支持存储从value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set–有序的集合)和hash(哈希类型)。
- 这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
- 在此基础上,Redis支持各种不同方式的排序
- 与Memcached一样,为了保存效率,数据都是缓存在内存中的
- 区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写追加的记录文件
- 在此基础上,Redis实现了master-slave(主从)同步
1.4Redis的使用场景
配合关系型数据库做高速缓存
- 高频次,热门访问的数据,降低数据库IO
- 分布式架构,做session共享
多样的数据结构存储持久化数据
1.5Redis默认按照目录
查看默认安装目录:
- redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何
- redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲
- redis-check-dump:修复有问题的dump.rdb文件
- redis-sentinel:Redis集群使用
- redis-server:Redis服务器启动命令
- redis-cli:客户端,操作入口
1.6Redis的启动
前台启动(不推荐)
前台启动,命令行窗口不能关闭,否则服务器停止
后台启动(推荐)
备份redis.conf配置文件
cp /opt/redis-6.7.2/ /myredis
将./myredis/redis.conf文件中的daemonize no修改为yes
启动redis
redis-server /myredis/redis.conf
ps -ef|grep redis
用客户端访问:redis-cli
Redis关闭:
单实例关闭:redis-cli shutdown
多实例关闭,指定端口关闭:redis-cli -p 6379[ port ] shutdown
1.7Redis是单线程+多路IO复用技术
数据库相关介绍
- 默认16个数据库,类似数组下标从0开始,初始默认使用0号库
- 使用命令 select 来切换数据库。如: select 8
- 统一密码管理,所有库同样密码。
- dbsize查看当前数据库的key的数量
- flushdb清空当前库
- flushall通杀全部库
多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符。**如果有一个文件描述符就绪,则返回,否则阻塞直到超时。**得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)
串行 vs 多线程+锁(memcached) vs 单线程+多路IO复用(Redis)
redis基于reactor模式开发了网络事件处理器,这个处理器叫做文件事件处理器,file event handler。这个文件事件处理器,是单线程的,redis才叫做单线程的模型,采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器来处理。
回调机制:
如果被监听的socket准备好执行accept、read、write、close等操作的时候,跟操作对应的文件事件就会产生,这个时候文件事件处理器就会调用之前关联好的事件处理器来处理这个事件。
就绪队列
多个socket可能并发的产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个socket,但是会将socket放入一个队列中排队,这个队列叫做就绪队列,每次从队列中取出一个socket给事件分派器,事件分派器把socket给对应的事件处理器。
一个socket的事件处理完之后,IO多路复用程序才会将队列中的下一个socket给事件分派器。文件事件分派器会根据每个socket当前产生的事件,来选择对应的事件处理器来处理。