认识NoSQL和Redis
认识NoSQL和Redis
一、NoSQL

NoSQL:Not-Only SQL,泛指非关系型数据库,作为关系型数据库的补充,,非关系型数据库一般不会用,font>
NoSQL特征:可扩容、可伸缩、大数据量下高性能、灵活的数据类型、高可用
NoSQL的分类
NoSQL数据库主要有以下四类。这些类别中的每一个都有其独特的属性和局限性。没有特定的数据库可以更好地解决所有问题。
基于键值对 key-value类型:Redis,memcached
列存储数据库 Column-oriented Graph:HBase
图形数据库 Graphs based:Neo4j
文档型数据库: MongoDB
- MongoDB是一个基于分布式文件存储的数据库,主要用来处理大量的文档。
Memcache
- 很早出现的 NoSql 数据库
- 数据都存储在内存中,
- 支持简单的 key-value 模式,支持
- 一般是作为缓存数据库辅助持久化的数据库(一般和MySQL等关系型数据库一起使用)
Redis
- 几乎覆盖了 Memcached 的绝大部分功能
- 数据都在内存中,支持持久化(数据可以存储到硬盘),主要用作备份恢复
- 除了支持简单的 key-value 模式,还支持多种数据结构 的存储,比如 list、set、hash、zset 。
- 一般是作为缓存数据库辅助持久化的数据库(一般和MySQL等关系型数据库一起使用)
MongoDB
- 高性能、开源、模式自由(schema free)的文档型数据库 (存储结构和json类似,里面存储的数据形式多样,结构更加复杂)
- 数据都在内存中, 如果内存不足,把不常用的数据保存到硬盘 虽然是 key-value 模 式 , 但 是 对 value ( 尤 其 是 json)提供了丰富的查询功能
- 支持二进制数据及大型对象
- 可以根据数据的特点替代 RDBMS ,成为独立的数据库。或者配合 RDBMS,存储特定的数据。

集群数据库服务器通常以如下形式对外提供数据服务

基本信息存放在MySQL数据库,文本类信息存放在MongoDB,图片信息存放在FastDFS,搜索关键字存放在Slor,热点信息存放在Redis,这些数据库服务器一起对外提供服务
二、Redis (mote ctionary ervice,远程字典服务器)
redis简介
Redis 是一个开源(BSD许可)的,C语言编写的,高性能的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它基于内存运行并支持持久化的高性能键值对(key-value)数据库
相关网站:
redis中文官网:http://www.redis.cn/
redis英文官网:https://redis.io/
特征:
- 数据间没有必然的关联关系:由于MySQL数据间的关联性太强,导致数据读取缓慢,NoSQL数据库要做的就是断开数据的关联关系
- 内部采用单线程机制进行工作:单线程模型,原子性比较强,可以保证数据安全,采用IO多路复用的方式也能保证高性能
- Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 高性能:官方提供测试数据,50个并发执行10w个请求,读的速度是11w次/s,写的速度是8.1w次/s。
- 多数据类型支持:string(字符串类型)、list(列表类型)、hash(散列类型)、set(集合类型)、sorted_set(有序集合类型)
- 持久化支持(非Redis主要功能):可以进行数据灾难恢复,避免突发情况导致数据丢失
- 丰富的特性: Redis还支持publish/subscribe, 通知, key过期等等特性。
Redis的特性
1、支持持久化。redis是内存数据库,数据是存在内存中,断电重启之后,数据会丢失,持久化可以将数据被备份到磁盘上面,断电重启之后,可以将数据加载到内存中。
2、支持丰富的数据类型。支持:string、list、set、sort set、hash
3、支持数据的备份,也就是支持主从复制。
Redis优点
1、性能高。读11w/s,写8.1w/s
2、丰富的数据类型,支持:string、list、set、sort set、hash
3、原子
4、丰富的特性,支持发布订阅,key过期。
Redis的应用
- 为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等
- 任务队列,如秒杀、抢购、购票排队等
- 即时信息查询,如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等
- 时效性信息控制,如验证码控制、QQ群投票控制等
- 分布式数据共享,如分布式集群架构中的 session 分离
- 消息队列
- 分布式锁
redis为什么是单线程及为什么快的总结
- Redis是纯内存数据库,,所以读取速度快。
- Redis使用的是非阻塞IO、IO多路复用,使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争。
- Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
- Redis避免了多线程的锁的消耗。
- Redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。
windows版Redis程序说明

Redis基本命令
命令行模式工具使用:功能性命令、清除屏幕信息、帮助信息查阅、退出指令
信息添加
set key value
信息查询:根据key查询对应的value,如果不存在,返回空(null)
get key

删除数据
del key

清除屏幕信息
clear
帮助命令:获取命令帮助文档,获取组中所有命令信息名称
help 命令名称

退出客户端
quit
exit
#单进程模型来处理客户端的请求,对读写等事件的响应通过对epoll的包装来做到。
#默认16个数据库,编号0-15,切换数据库
select + num
#把key从当前库移动到目标库
move key [num]
#查看当前数据库的key的数量
dbs
#清空当前数据库,
flushdb
#清空所有数据库
flushall
#查看key值,问号表示占位符
keys *,keys k?
#判断key是否存在
exists key
#查看key的剩余有效时间,-1表示永不过期,-2表示已过期
ttl key
#为给定的key设置过期的时间
expire key seconds
#查看key的类型
type key
#删除key
del key