一、安全性
设置客户端连接后进行任何其他指定需要使用的密码。
警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在1秒钟进行150K次的密码尝试,这就意味着你需要指定非常非常强大的密码来防止暴力破解。
设置密码:
1、在配置文件(reids.config)中修改参数(requirepass),重启后生效
2、可以动态设置,使用config set requirepass 密码,立即生效
验证密码:
1、进入客户端(./redis-cli)后执行 auth 密码
2、进入客户端时验证密码: ./redis-cli -a 密码
二、主从复制
redis主从复制配置和使用都十分的简单。通过主从复制可以允许多个slave server(从服务)拥有和master server(主服务)相同的数据库副本
redis主从复制特点:
1、master可以拥有多个slave
2、多个slave可以连接同一个master外,还可以连接到其他slave
3、主从复制不会阻塞master,在同步数据时master可以继续处理client请求
4、提高系统的伸缩性
redis 主从复制过程:
1、slave与master建立连接,发送sync同步命令
2、maser会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。
3、后台完成保存后,就将此文件发送给slave
5、slave将此文件保存在硬盘上,把数据映射到内存数据库中
redis配置主从复制:
修改slave服务器的配置文件中加入以下配置即可
slaveof #指定master的IP 和端口
masterauth lamp #这个是主机的密码
注意:在redis.conf配置文件中查看bind配置,若绑定为127.0.0.1需要进行修改为0.0.0.0或者直接注释掉。
三、事务处理
1、使用mutil 与 exec(提交事物队列)
2、discard命令取消事物队列,达到事物回滚的目的
注意:事物队列中如果有多个操作,如果某一个操作出错,整个事物不会回滚
乐观锁:
大多数是基于数据版本(version)的记录机制实现的。即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个“version”字段来实现读取数据时,将此版本号一同读出,之后更新时,对此版本号加1.此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比较,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据。
redis乐观锁实现:watch 命令
watch key 对指定的key进行监控,当exec时候如果监视的key从调用watch后发生过变化,则整个事物提交失败。
也可以调用watch多次监视多个key,这样就可以对指定的key加乐观锁了。
注意:watch的key是对整个连接有效的,事物也一样。如果连接断开,监视和事物都会被自动清除。当然exec,discard,unwatch命令都会清除连接中的所有监视。
最大内存策略,你有 5 个选择:
四、持久化机制
redis是一个支持持久化的内存数据库,也就是说redis需要经常讲内存中的数据同步到硬盘来保证持久化。
Redis支持两种持久化方式:
1、snapshotting(快照)也是默认方式 (将数据存储到二进制文件中)
这种方式是将内存中的数据一快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以通过配置设置自动做快照持久化的方式。可以配置redis在N秒内如果超过m个key被修改就自动做快照。
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内如果超过10个key被修改,则发起快照保存
2、Append-only file (缩写aof)的方式 (将更新、写入、删除存储到二进制文件)
由于快照方式存是在一定的时间间隔做一次,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。
aof比快照方式有更好的持久化性,是由于在使用aof时,redis会将每一个收的的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
当然由于aof会在内核中缓存write做的修改,所以可能不会立即写入磁盘上。这样aof方式的持久化也还是会有可能会丢失部分修改。
可以通过配置文件告诉redis,通过fsync函数强制os写入到磁盘的时机。
配置文件:
appendonly yes //启用aof持久化方式
#appendfsync always //收到写命令就立即写入磁盘,最慢,但保证完全的持久化
appendfsync everysec //每分钟写入磁盘一次,在性能和持久化方面做了很好的折中
#appendfsync no //完全依赖os,性能最好,持久化没保证
五、发布订阅消息
是一种消息通信模式,主要的目的是解除消息发布者和消息订阅者之间的耦合,Redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令想redis server订阅自己感兴趣的消息类型,redis将信息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的信息时,订阅该消息类型的所有client都会收到此消息。
六、虚拟内存的使用
Redis的虚拟内存与操作系统的虚拟内存不是一回事。但是思路和目的都是相同的。就是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内容空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了可以将数据分割到多个redis server外。另外能够提高数据库容量的办法就是使用虚拟内存把不经常访问的数据交换到磁盘上。
配置文件中:
VM相关的配置
vm-enabled yes #开启VM功能
vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径
vm-max-memory 1000000 #redis使用的最大内存上限
vm-page-size 32 #每个页面的大小 32字节
vm-pages 134217728 #最大使用多少页面
vm-max-threads 4 #用于执行value对象换入换出的工作线程数量