|
一、NoSQL介绍
1、NoSQL(NoSQL =Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。
2、NoSQL,指的是非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。
3、NoSQL是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如:SQL标准(增删改查)、ACID属性(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability))、表结构等等,这类数据库有以下特点:非关系型的、分布式的、开源的、水平可扩展的。
4、常用的键值对:
JavaScript:JSON
Java:HashMap
5、NoSQL特点
1)处理超大量的数据
2)运行在便宜的PC服务器集群上
3)击碎了性能瓶颈
6、NoSQL适用场景
1)对数据高并发读写
2)对海量数据的高效率存储和访问
3)对数据的高可扩展性和高可用性
二、Redis介绍
1、Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、高性能的Key-Value数据库,并提供多种语言的API。
2、和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)
3、与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
4、这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。
5、Redis部署方案
1)目前全球最大的Redis用户是新浪微博
2)应用程序直接访问Redis数据库
3)应用程序直接访问Redis数据库,只有当Redis访问失败时才访问MySql。
6、Redis适用场合
1)取最新N个数据的操作,例如:取最新的500篇文章
2)排行榜应用,取TOPN操作
3)需要精确设定过期时间的应用
4)计数器应用
5)Uniq操作,获取某段时间所有数据排重值
6)实时系统,反垃圾系统
7)Pub/Sub构建实时消息系统,例如:发布与订阅
8)构建队列系统,例如:栈/队列
9)缓存
7、Redis的安装与部署
步骤:
1)下载:wget http://download.redis.io/releases/redis-2.8.5.tar.gz
2)编译源程序
? tar zxvf redis-2.8.5.tar.gz
? cd redis-2.8.5
? make
? cd src
? make install
3)移动文件,便于管理
? sudo mkdir -p /usr/local/redis/bin
? sudo mkdir -p /usr/local/redis/etc
? sudo mv /home/lizhanhong/javatools/redis-2.8.5/redis.conf/usr/local/redis/etc
? cd /home/lizhanhong/javatools/redis-2.8.5/src
? sudo mv mkreleasehdr.sh redis-benchmark redis-check-aofredis-check-dump redis-cli redis-server /usr/local/redis/bin/
4)启动Redis服务
? /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
? Redis服务端的默认连接端口是6379
? Mysql服务端的默认连接端口是3306
? MongoDB服务端的默认连接端口是27017
5)客户端连接
/usr/local/redis/bin/redis-cli
6)停止Redis实例
? 方法一:/usr/local/redis/bin/redis-cli shutdown
? 方法二:pkill redis-server
? 方法三:kill -p 进程号
? 查看端口:netstat -tunpl |grep 6379
? 系统启动时开启redis服务:
在/etc/rc.local里面添加
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
| 7)后台启动配置
修改配置文件redis.conf里面的daemonize值为yes
8、Redis的配置
daemonize 是否以后台进程运行,默认为no
pidfile 如以后台进程运行,则需指定一个pid,默认为/var/run/redis.pid
bind 绑定主机IP,默认值为127.0.0.1(注释)
port 监听端口,默认为6379
timeout 超时时间,默认为300(秒)
loglevel 日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning
logfile 日志记录方式,默认值为stdout
databases 可用数据库数,默认值为16,默认数据库为0
save 指出在多长时间内,有多少次更新操作,就将数据同步到数据文件。这个可以多个条件配合,比如默认配置文件中的设置,就设置了三个条件。
save 900 1 900秒(15分钟)内至少有1个key被改变
save 300 10 300秒(5分钟)内至少有300个key被改变
save 60 10000 60秒内至少有10000个key被改变
rdbcompression 存储至本地数据库时是否压缩数据,默认为yes
dbfilename 本地数据库文件名,默认值为dump.rdb
dir 本地数据库存放路径,默认值为 ./
slaveof 当本机为从服务时,设置主服务的IP及端口(注释)
masterauth 当本机为从服务时,设置主服务的连接密码(注释)
requirepass 连接密码(注释)
maxclients 最大客户端连接数,默认不限制(注释)
maxmemory 设置最大内存,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将无法再进行写入操作。(注释)
appendonly 是否在每次更新操作后进行日志记录,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认值为no
appendfilename 更新日志文件名,默认值为appendonly.aof(注释)
appendfsync 更新日志条件,共有3个可选值。no表示等操作系统进行数据缓存同步到磁盘,always表示每次更新操作后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。
vm-enabled 是否使用虚拟内存,默认值为no
vm-swap-file 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm- max-memory 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的 (Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0。
|
|
|