Redis有以下优点:
1.支持丰富的数据类型:String、List、Set、Sorted Set、Hash等
2.支持2种数据持久化方式:Snapshotting(快照)和 Apppend-Only file(追加)
3.支持主从复制
安装
wget http://download.redis.io/releases/redis-3.0.5.tar.gz
tar -zxvf redis-3.0.5.tar.gz
cd redis-3.0.5
make
redis没有提供make install命令,需手动安装
cp redis.conf /etc/redis.conf
cd src/
cp redis-benchmark redis-cli redis-server /usr/bin/
make命令执行后,会在当前目录下生成几个可执行文件,其中有3个比较重要的
1.redis-server Redis服务器程序
2.redis-cli Redis命令行操作工具,也可以用telnet根据其纯文本协议操作
3.redis-benchmark Redis性能测试工具,测试Redis在当前系统及配置下的读写能力
运行Redis
redis-server /etc/redis.conf &
注意:key使用字符串存储,但是key中不能出现空格或换行符“\n”,原因:空格和换行符都是Redis的特殊字符(Redis以“\n”作为命令结束符,以空格作为命令和参数的分隔符),但只限于key,value可以使用任何字符。
此外,String类型支持incr操作,可以用作统计计算,如统计网站访问次数、博客访问次数等。
排序命令 SORT key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey]
redis支持对List、Set、Sorted Set类型进行排序
但是我对于 BY Pattern 还是没有理解
事务处理
Redis支持简单的事物,但其事物和MySQL是不一样的。
Redis接收到命令 multi 时,此连接便进入一个事务上下文,Redis把此连接发出的命令存入一个队列中。
当此连接再发出命令 exec ,Redis便开始按顺序执行队列中的所有命令。
Redis只能保证事务的每个命令能够连续执行,但如果事务中有命令执行失败,Redis不进行回滚操作,这是和MySQL不同的地方。
可调用命令 discard 取消一个事务。
持久化2种方式:
1.内存快照(Snapshotting)
内存快照方式 是 将内存中的数据以快照方式写入二进制文件中,默认文件名为dump.rdg
Redis每隔一段时间进行一次内存快照操作,客户端使用save或bgsave命令告诉Redis需要做一次内存快照操作。save命令在主线程中保存内存快照,Redis有单线程处理所有请求,执行save命令可能阻塞其他客户端请求,从而导致不能快速响应请求,所以建议不要使用save命令。另外要注意:内存快照每次都把内存数据完整的写入硬盘,而不是只写增量数据。所以如果数据量大,写入操作比较频繁,从而严重影响性能。
2.日志追加(Append-only file)
日志追加(aof)方式是把增加、修改数据的命令通过write函数追加到文件微博(默认是appendonly.aof)。Redis重启时,读取appendonly.aof文件中的所有命令并执行,从而把数据写入内存中。
另外,操作系统内核I/O接口可能存在缓存,所以日志追加方式不可能立即写入文件中,这样就有可能丢失部分数据。
幸运的是Redis提供了解决方法,通过修改配置文件告诉Redis应该在什么时候使用fsync函数强制操作系统把缓存写入磁盘。
有3种方法:
appendonly yes 启动日志追加持久化方式
appendfsync option :
always 每次收到增加或修改命令就立刻强制写入磁盘
everysec 每秒强制写入磁盘一次
no 是否写入磁盘完全依赖操作系统
主从同步
Redis主从同步的优点:
1.Master可以有多个Slave
2.多个Slave连接到相同Master,Slave还可以连接其他Slave
3.不会阻塞Master。当一个或者多个Slave与Master进行初次同步数据时,Master可以继续处理客户端的请求。相反,Slave在初次同步数据时会阻塞从而不能处理客户端的请求。
4.主从同步用来提高系统的伸缩性,比如多个Slave专门用于客户端的读请求。
5.在Master服务器上禁止数据持久化,只在Slave服务器上进行数据持久化。
同步方法:
修改slave服务器的配置文件
#从服务器设置端口号
port 6479
#配置主服务器的IP 端口号
slaveof 127.0.0.1 6379
再发送SYNC命令
无论是第一次同步建立的连接 还是 连接断开后重新建立的连接,Master都启动一个后台进程,将内存数据以快照方式写入文件中,同时Master主进程开始收集新的写命令并且缓存起来。
Master后台进程完成内存快照后,把数据文件发给Slave,Slave将文件保存在磁盘,然后把数据加载到内存中。
过程:
1.Slave主动连接Master
2.Slave发送SYNC到Master请求同步
3.Master备份数据库到rdb文件
4.Master把rdb文件传给Slave
5.Slave清空数据库数据,把rdb写入缓存
接着 Master把修改数据的操作,通过命令的形式转发给Slave,Slave只需执行这些命令就可以达到同步的效果。