一、背景简介
什么是NoSQL?
- NoSQL = not only sql
- 非关系型数据库的泛称
- 用于超大规模的数据存储
- 存储数据不需要固定模式
- 可以快速横向扩展
为什么要用NoSQL?
- 高并发读写,海量数据下,读取性能优异
- 高容量存储和高效存储,数据模型灵活
- 高扩展性和高可用性,数据间无关系,易于扩展
NoSQL数据库分类?
- 键值存储数据库:Redis
- 列存储数据库:BigTable,Cassandra,HBase
- 文档性数据库:MongoDB
- 图数据库:Neo4j
关系型数据库(RDBMS)和非关系型数据库(NoSQL)各自特点:
RDBMS:
- 高度组织化结构化数据
- 结构化查询语言(SQL)
- 数据与关系都存储在单独的表中
- 数据操纵语言(DML),数据定义语言(DDL)
- 严格的一致性
- 基础事务
NoSQL:
- 没有声明性查询语言
- 没有预定义的模式
- 键值对存储、列存储、文档存储
- 图形数据
- 最终一致性,而非ACID属性
- 非结构化和不可预知的数据
- 高性能,高可用和可伸缩性
Redis
Redis=Remote DIctionary Server,是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日执行、key-value数据库,并提供多种语言的API。
Redis通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(MAP)、列表(list)、集合(sets)和有序集合(sorted sets)。
注意事项:
- 在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别;
- Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability = age*log(size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的;
- 同时由于Redis将内存中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改;
- 当从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的,所以Redis允许我们设置I/O线程池的大小;
NoSQL产品对比:
二、Redis安装
redis安装:
- 下载地址:https://github.com/MSOpenTech/redis/releases;
- 操作系统:windows、linux;
- linux安装:
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar xzf redis-5.0.0.tar.gz
cd redis-5.0.0
make;
linux启动服务:src/redis-server &
python安装:pip install redis 或 esqy_install redis
配置文件:
- Redis配置文件位于Redis安装目录的根目录下,文件名为redis.conf
- 主要配置项
daemonize no redis默认不是以守护进程的方式运行,建议改为yes
port 6379 默认端口为6379
bind 127.0.0.1 默认绑定ip为本机
timeout 300