redis全称:remotedictionary server
存储系统:
1、RDBMS关系型数据库: MYSQL/ SQLSERVER
2、NOSQL非关系型数据库: REDIS/MEMCACHED/MongoDB/HBas
如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:
1 、Redis不仅仅支持简单的k/v(key、value)类型的数据,同时还提供list,set,hash等数据结构的存储。
2 、Redis支持数据的备份,即master-slave模式的数据备份,redis通过SENTINEL哨兵来进行主从的切换。redis在3.0 开始支持redis cluster(集群),但是可能并不完善
3、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。在Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别(我个人是这么认为的)
4、另外:redis单线程,memcached多线程(可以使用多核cpu)
Redis组件:
1、redis-serverredis的服务端
2、redis-cliredis的客户端
3、commandlineinterface
4、redis-benchmark(压力测试工具)
5、redis-check-dump&redis-check-aof(检查redi持久化工具)
6、corrupted RDB/AOF fileutilities
Redis只会缓存所有的key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability= age*log (size_in_memory)”计算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。
同时由于Redis将内存中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个操作,直到子线程完成swap操作后才可以进行修改。
1、Million small key →stringvaluepairsuse~100MBof memory
2、Single threaded → but cpu should not to be thebottleneck
3、Averagelinuxsystemcandeliver even 500K requestpersecond(50w并发)如果较好的硬件经过测试支持百万的并发是完全没有问题的
第一步、wget http://download.redis.io/releases/redis-3.2.0.tar.gz
第二步、解压并进入源码目录,less README.md里面有安装步骤
第二步、在源码目录make,完成安装
第四步、在源码目录make test,检查安装有无问题,如果出现以下问题:
[err]: Test replication partial resync: ok psync (diskless: yes, reconnect: 1) in tests/integration/replication-psync.tcl
Expected condition '[s -1 sync_partial_ok] > 0' to be true ([s -1 sync_partial_ok] > 0)
是由于安装环境(如虚拟机)配置太低导致的,解决方式:
http://www.voidcn.com/blog/chenggong2dm/article/p-6097574.html
第一步、整理Redis的配置文件,在源码目录下
[root@localhost redis]# mkdir conf
[root@localhost redis]# mv redis.conf conf/
[root@localhost redis]# mv sentinel.conf conf/
第二步、整理不常用文件,在源码目录下
[root@localhost redis]# mkdir others
[root@localhost redis]# mv 00-RELEASENOTES BUGS CONTRIBUTING COPYING INSTALL Makefile MANIFESTO README.md runtest runtest-cluster runtest-sentinel others/
第三步、整理可执行文件,在源码目录下
[root@localhost redis]# mkdir bin
[root@localhost redis]# cd src
[root@localhost src]# mv redis-server redis-cli redis-sentinel ../bin
1、修改Redis服务的监听地址
默认是bind 127.0.0.1——>应该修改为bind 本机IP
2、开启保护模式
默认是protected-mode yes——>保持默认就可以了
3、Redis服务的监听端口
默认是port 6379——>保持默认就可以了
4、 tcp的三次握手进行中accept queue队列的Send-Q的最大值
默认是tcp-backlog 511——>保持默认就可以了
5、以守护进程(后台daemon)的方式运行redis
默认是daemonize no——>应该修改为daemonize yes
6、指定redis的日志文件以及写日志的级别
默认是logfile ""——>应该修改为logfile "自定义目录"
默认是loglevel notice——>保持默认就可以了
7、redis最多支持多少个数据库
默认是databases 16——>保持默认就可以了
8、设置RDB的持久化方式→Snapshotting快照
9、指定RDB持久化文件
默认是 dbfilename dump.rdb RDB持久化的文件名,保持默认就可
10、设置AOF的持久化方式→类似于mysql的二进制日志
默认是 appendonly no 表示不启用AOF方式
appendfilename "appendonly.aof" AOF持久化的文件名
appendfsync everysec 表示每秒记录一次持久化文件
修改为 appendonly yes 表示启用AOF方式
剩下俩个保持默认就可以了
11、指定两种持久化文件的生成路径:
默认是 dir ./ ——> 修改为dir 指定的路径
12、为redis设置密码→客户端连接使用
默认是 #requirepass foobared ——> 修改为requirepass redis
13、设置redis主从→以上都是redis的单点设置
redis主服务不用做任何配置,只需要在从服务器的redis.conf上指定master的ip与端口后,启动从库就可以自动同步。默认是#slaveof
官网给出的启动命令:If you want to provide your redis.conf, you have to run it using anadditional parameter (the path of the configuration file):
% cd src
% ./redis-server /path/to/redis.conf
由于我们之前更改了目录结构,所以启动方式如下:
在同一个数据库内,key是不能重复的,我们平时把这个数据库叫名称空间(Redis默认有16个名称空间),我们平时使用不同的名称空间,在不同的名称空间里,键值是可以重复的。
设置RDB的持久化方式→Snapshotting快照
事务:一组相关的操作是原子性的,要么都执行,要么都不执行;一组事务,要么成功,要么撤回。redis通过multi、exec等命令实现事务功能。
一个master可以有多个slave,一个slave还可以再有slave,所以支持链式复制。Master以非阻塞方式同步数据至salve,master可以同时处理多个slave的操作。
scp -r -P 20755 redis [email protected]:/app/zpy mkdir -p /data/zpy/redis/ |
创建redis的日志文件
在redis.conf里修改bind语句
在redis.conf里修改slaveof语句(有2种方式)和 masterauth语句
启动指令都是{redis安装目录}/redis-server ../conf/redis.conf
修改 redis.conf 文件,添加以下语句以禁用远程修改 DB 文件地址
rename-commandFLUSHALL ""
rename-commandCONFIG ""
rename-commandEVAL ""
为 Redis 服务创建单独的用户和家目录,并且禁止登陆/sbin/nologin
修改 redis.conf 文件,添加requirepass 自定义密码
修改 redis.conf 文件,修改bind 10.0.140.84,使得 Redis 服务只在当前主机可用