Redis使用与实践

来源:互联网 发布:监控组态软件 编辑:程序博客网 时间:2024/05/21 10:47

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.conf详解

运行Redis

redis-server /etc/redis.conf &

注意:key使用字符串存储,但是key中不能出现空格或换行符“\n”,原因:空格和换行符都是Redis的特殊字符(Redis以“\n”作为命令结束符,以空格作为命令和参数的分隔符),但只限于key,value可以使用任何字符。

Redis命令行大全

此外,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只需执行这些命令就可以达到同步的效果。

0 0
原创粉丝点击