Redis简介
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set--有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
NoSQL适用场景
1.对数据高并发读写
2.对海量数据的高效率存储和访问
3.对数据的高可扩展性和高可用性
Redis适用场合
1、取最新N个数据的操作
2、排行榜应用、取TOP N操作
3、需要精确设定过期时间的应用
4、计数器应用
5、Uniq操作,获取某段时间所有数据排重值
6、实时系统、发垃圾系统
7、pub/sub构建实时消息系统
8、构建队列系统
9、缓存
安装Redis
Redis的代码遵循ANSI-C编写,可以在所有POSIX系统(如Linux, *BSD, Mac OSX,Solaris等)上安装运行。而且Redis并不依赖任何非标准库,也没有编译参数必需添加。redis的安装出奇的简单,这可能也是他风靡的一个原因,让人很容易上手,不像某些东西,编译阶段就能让人完全绝望。
$ wget http://download.redis.io/releases/redis-3.0.6.tar.gz $ tar xzf redis-3.0.6.tar.gz $ cd redis-3.0.6 $ make $ cd src $ make install
安装过程中出现:
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz tar xzvf tcl8.6.1-src.tar.gz -C /usr/local/ cd /usr/local/tcl8.6.1/unix/ ./configure make make install
然后再进行编译
[root@centos-7 src]# make test
编译完成后,移动文件,便于管理:
[root@centos-7 src]# mkdir -p /usr/local/redis/bin [root@centos-7 src]# mkdir -p /usr/local/redis/etc [root@centos-7 src]# mv ../redis.conf /usr/local/redis/etc [root@centos-7 src]# mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-dump redis-cli redis-server /usr/local/redis/bin
- redis-server:Redis服务器的daemon启动程序
- redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
- redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
启动Redis
现在就可以启动redis了,redis只有一个启动参数,就是他的配置文件路径。(默认不是以后台daemon方式运行)
root@Ubuntu:/usr/local/redis/etc# /usr/local/redis/bin/redis-server ./redis.conf
下面是redis.conf的主要配置参数的意义:
- daemonize:是否以后台daemon方式运行,如果需要后台运行,改为yes
- pidfile:pid文件位置 默认在/var/run/redis.pid
- bind:绑定ip,设置后只接受来自该ip的请求
- port:监听的端口号
- timeout:设置客户端连接时的超时时间,单位为秒
- loglevel:log信息级别,分为4级,debug、varbose、notice、warning
- logfile:配置文件地址
- databases:设置数据库的个数,默认使用的数据库为0,数据库个数为16
- save * :保存快照的频率,第一个表示多长时间,第三个*表示执行多少次写操作。在一定时间内执行一定数量的写操作时,自动保存快照。可设置多个条件。
- rdbcompression:是否使用压缩
- dbfilename:数据快照文件名(只是文件名,不包括目录)
- dir:数据快照的保存目录(这个是目录)
- slaveof:设置数据库为其他数据库的从数据库
- masterauth:主数据库连接需要的密码验证
- requirepass:设置登录时需要使用的密码
- maxclients:限制同时连接的客户数量
- maxmemory:设置redis能够使用的最大内存
- appendonly:是否开启appendonlylog,开启的话每次写操作会记一条log,这会提高数据抗风险能力,但影响效率。
- appendfsync:appendonlylog如何同步到磁盘(三个选项,分别是每次写都强制调用fsync、每秒启用一次fsync、不调用fsync等待系统自己同步)
- vm-enabled:是否开启虚拟内存支持
- vm-swap-file:设置虚拟内存的交互文件路径
- vm-max-memory:设置redis使用的最大物理内存大小
- vm-page-size:设置虚拟内存的页大小
- vm-pages:设置交换文件的总的page数量
- vm-max-threads:设置VM IO同时使用的线程数量
- glueoutputbuf:把小的输出缓冲存放在一起
- hash-max-zipmap-entries:设置hash的临界值
- activerehasing:重写hash
我们可以开启一个Redis客户端进行测试(配置文件中默认的监听端口是6379):
root@Ubuntu:/usr/local/redis/etc# redis-cli Could not connect to Redis at 127.0.0.1:6379: Connection refused not connected> exit root@Ubuntu:/usr/local/redis/etc# /usr/local/redis/bin/redis-server ./redis.conf root@Ubuntu:/usr/local/redis/etc# redis-cli 127.0.0.1:6379>
终止redis进程
[root@centos-7 bin]# pkill redis-server
#或者 [root@centos-7 bin]# ./redis-cli shutdown
#或者
simon@ubuntu:/usr/local/redis/bin$ ps aux | grep redis root 1211 0.3 0.2 36112 8268 ? Ssl 22:01 0:02 /usr/local/redis/bin/redis-server 127.0.0.1:6379 simon 3098 0.0 0.0 15984 1080 pts/19 S+ 22:16 0:00 grep --color=auto redis simon@ubuntu:/usr/local/redis/bin$ kill -9 1211