redis 介绍部署php
官网:http://www.redis.io/
http://www.redis.cn/
http://blog.nosqlfan.com/mysql
Remote Dictionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统,redis和大名鼎鼎的memcached缓存服务很像,可是redis支持的数据类型更加丰富,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)等。
这些数据类型都是支持push/php、add/remove及取交集、并集和差集以及更加丰富的操做,并且这些操做都是原子性的,在此基础上,redis还支持各类不一样的排序,与memcached缓存服务同样,为了保证效率,数据都是缓存在内存中提供服务,和memcached不一样的是,redis持久化缓存服务还会周期性把更新的数据写到磁盘已经把修改的操做记录追加到文件里记录,比memcached更有优点的是,redis还支持主从同步,这点很相似关系型数据库mysql。
redis的出如今必定程度上弥补了memcached这类key-value内存缓存服务不足,在部分场合上能够对关系型数据库起到很好的补充做用。linux
1.redis优势
性能很高:redis能支持超过10万每秒的读写评论
丰富的数据类型:redis支持二进制的strings,lists,hashes,set已经ordered set等数据类型操做
原子:redis的全部操做都是原子性的,同时redis还支持对几个操做全并后的原子性操做
丰富的特性:
主从复制:redis支持异机主从复制
2.数据类型:
string 字符串类型
list(链表)
set(集合)
zset(有序集合
hash 哈希c++
3.redis的应用场景
传统的mysql+memcached的网站架构遇到的问题
mysql数据库其实是合适进行海量数据存储的,加上经过memcached将热点数据存放到内存cache里,达到加速数据访问的目的,绝大部分公司都曾经使用过这样的架构,但随着业务数量的不断增长,和访问量的持续增长,不少问题就会暴露出来redis
1.安装gcc环境
yum install gcc-c++sql
2.下载源码包并解压
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar -zxvf redis-3.2.9.tar.gz
cd redis-3.2.9数据库
3.安装ruby2.4.1并编译(必定要安装大于2.2.2的ruby,要否则redis在make的时候会报错)
wget http://ftp.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz
tar -zxvf ruby-2.4.1.tar.gz
cd ruby-2.4.1
mkdir -p /usr/local/ruby
./configure --prefix=/usr/local/ruby
make && make install
ln -s /usr/local/ruby/bin/ruby /usr/bin/ruby缓存
4.安装
make
make install PREFIX=/usr/local/redis
cp redis.conf /usr/local/redis/bin/redis.conf
chmod /usr/local/redis/bin/redis.confruby
5.启动redis
./redis-server redis.conf架构
6.验证
./redis-cli -p 6379
127.0.0.1:6379> set ab 123
OK
127.0.0.1:6379> get ab
"123"
1.在/usr/local/下面建立redis-cluster目录
mkdir -p /usr/local/redis-cluster
2.复制/usr/local/redis/bin目录到redis-cluster里面并重命名为redis1
cd /usr/local
cp -r redis/bin redis-cluster/redis1
3.redis1,redis2,redis3,redis4,redis5,redis6(必须6个节点以上才能建立集群)
分别修改成redis-7001.conf,redis-7002.conf 依次到redis-7006.conf
以redis-7001为例:
daemonize yes
port 7001
logfile "./redis-7001.log"
protected-mode no
pidfile /var/run/redis_7001.pid
cluster-enabled yes
appendonly yes
4.将redis-trib.rb复到制redis-cluster目录里面
cp /root/redis-3.2.4/src/redis-trib.rb ./redis-cluster
5.安装gem
yum install rubygems -y
6.安装ruby的redis包
gem install redis
7.分别进入redis1,redis2,redis3,redis4,redis5,redis6里面执行
./redis-server redis-7001.conf
8.用redis-trib.rb构建集群
cd /usr/local/redis-cluster/
./redis-trib.rb create --replicas 1 172.16.0.100:7001 172.16.0.100:7002 172.16.0.100:7003 172.16.0.100:7004 172.16.0.100:7005 172.16.0.100:7006
9.验证集群是否成功
./redis-cli -h 172.16.0.100 -c -p 7002
> set hello helloword > get hello
#是否做为守护进程运行
daemonize yes
#如之后台进程运行,则需指定一个pid,默认为/var/run/redis.pid
pidfile redis.pid
#绑定主机IP,默认值为127.0.0.1
#bind 127.0.0.1
#Redis默认监听端口
port 6379
#客户端闲置多少秒后,断开链接,默认为300(秒)
timeout 300
#日志记录等级,有4个可选值,debug,verbose(默认值),notice,warning
loglevel verbose
#指定日志输出的文件名,默认值为stdout,也可设为/dev/null屏蔽日志
logfile stdout
#可用数据库数,默认值为16,默认数据库为0
databases 16
#保存数据到disk的策略
#当有一条Keys数据被改变是,900秒刷新到disk一次
save 900 1
#当有10条Keys数据被改变时,300秒刷新到disk一次
save 300 10
#当有1w条keys数据被改变时,60秒刷新到disk一次
save 60 10000
#当dump .rdb数据库的时候是否压缩数据对象
rdbcompression yes
#本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
#本地数据库存放路径,默认值为 ./
dir /var/lib/redis/
########### Replication #####################
#Redis的复制配置
# slaveof <masterip> <masterport> 当本机为从服务时,设置主服务的IP及端口
# masterauth <master-password> 当本机为从服务时,设置主服务的链接密码
#链接密码
# requirepass foobared
#最大客户端链接数,默认不限制
# maxclients 128
#最大内存使用设置,达到最大内存设置后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,任到达最大内存设置,将没法再进行写入操做。
# maxmemory <bytes>
#是否在每次更新操做后进行日志记录,若是不开启,可能会在断电时致使一段时间内的数据丢失。由于redis自己同步数据文件是按上面save条件来同步的,因此有的数据会在一段时间内只存在于内存中。默认值为no
appendonly no
#更新日志文件名,默认值为appendonly.aof
#appendfilename
#更新日志条件,共有3个可选值。no表示等操做系统进行数据缓存同步到磁盘,always表示每次更新操做后手动调用fsync()将数据写到磁盘,everysec表示每秒同步一次(默认值)。
# appendfsync always
appendfsync everysec
# appendfsync no
################ VIRTUAL MEMORY ###########
#是否开启VM功能,默认值为no
vm-enabled no
# vm-enabled yes
#虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享
vm-swap-file /tmp/redis.swap
#将全部大于vm-max-memory的数据存入虚拟内存,不管vm-max-memory设置多小,全部索引数据都是内存存储的 (Redis的索引数据就是keys),也就是说,当vm-max-memory设置为0的时候,实际上是全部value都存在于磁盘。默认值为0。
vm-max-memory 0
vm-page-size 32
vm-pages 134217728
vm-max-threads 4
############# ADVANCED CONFIG ###############
glueoutputbuf yes
hash-max-zipmap-entries 64
hash-max-zipmap-value 512
#是否重置Hash表
activerehashing yes
注意:Redis官方文档对VM的使用提出了一些建议:
当你的key很小而value很大时,使用VM的效果会比较好.由于这样节约的内存比较大.当你的key不小时,能够考虑使用一些很是方法将很大的key变成很大的value,好比你能够考虑将key,value组合成一个新的value.最好使用linux ext3 等对稀疏文件支持比较好的文件系统保存你的swap文件.vm-max-threads这个参数,能够设置访问swap文件的线程数,设置最好不要超过机器的核数.若是设置为0,那么全部对swap文件的操做都是串行的.可能会形成比较长时间的延迟,可是对数据完整性有很好的保证.