首页 > 代码库 > redis安装配置

redis安装配置

redis介绍:
REmote DIctionary Server(Redis)是一个基于Key-value键值对的持久化数据库存储系统,redis和大名鼎鼎的Memcached缓存服务很像,但是redis支持数据存储类型更丰富,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)等;

这些数据类型都支持push/pop,add/remove及取交集、并集合差集更丰富的操作,而且这些操作都是原子性的,在此基础上,redis支持各种不同方式的排序,与memcached缓存服务一样,为了保证效率,数据都是缓存在内存中提供服务的,和memcached不同的是,redis持久化缓存服务还会周期性的把更新的数据写入到吸盘以及修改的操作追加到文件夹里记录下来,比memcached更有优势的是redis还支持master-slave同步,这点很类似关系型数据库MySQL。

redis的出现,在一定程度上弥补了memcached这类key-value内存缓存服务的不足,在部分场合可以对关系数据库起到很好的补充作用,redis提供了python,ruby,erlang,php客户端,使用很方便;官方网站:http://www.redis.io/documentation


redis优点:
1、性能很高:redis能支持超过100K+每秒的读写频率;
2、丰富的数据类型:redis支持二进制的String,Lists,Hashes,Sets以及Ordered Sets等数据类型操作;
3、原子:redis的所以操作都是原子性的,同时redis还支持对几个操作全并后的原子性执行;
4、丰富的特性:redis还支持publish/subscribe,通知,key过期等特性;
5、redis支持异机主从复制;
6、与memcached不同,可以持久化存储数据;


redis的数据类型:
1、String 字符串
2、Hash 哈希
3、List 列表
4、Set 集合
5、Sorted set 排序集合


redis应用场景:
MySQL数据库实际上是适合进行海量数据存储的,加上通过memcached将热点数据存放到内存里,达到加速数据访问的目的,但随着业务数据的不断增加,和访问量的持续增长,很多问题就会暴露出来;
1、需要不断的对MySQL进行拆库拆表,memcached也需要不断跟着扩容,扩容和维护工作占据大量开发运维时间;
2、memcached与MySQL数据库数据一致性问题是个难度;
3、memcached数据命中率低或会宕机会导致大量访问直接穿透到数据库中,导致MySQL无法支持访问;
4、跨机房cache同步一致性问题;

redis的最佳应用场景:
1、redis最佳试用是全部数据in-memory;
2、redis更多场景是作为memcached的替代品来使用;
3、当需要除key/value之外的更多数据类型支持时,使用redis更合适;
4、当存储的数据不能被剔除时,使用redis合适;
5、需要负载均衡的场景(redis主从同步)
5、支持持久化;

更多redis作者谈redis应用场景:http://blog.nosqlfan.com/html/2235.html


Redis服务的安装搭建:

[root@bbs tools]# wget -q http://download.redis.io/releases/redis-2.8.24.tar.gz   ##下载最新版的redis;

[root@bbs tools]# tar xf redis-2.8.24.tar.gz   ##解压redis包
[root@bbs tools]# cd redis-2.8.24
[root@bbs redis-2.8.24]#
[root@bbs redis-2.8.24]# make MALLOC=jemalloc
[root@bbs redis-2.8.24]# make PREFIX=/usr/local/redis install
[root@bbs redis-2.8.24]# tree /usr/local/redis /usr/local/redis └── bin ├── redis-benchmark ##redis性能呢测试工具; ├── redis-check-aof ##更新日志检查; ├── redis-check-dump ##用于本地数据库检查; ├── redis-cli ##redis命令行操作工具; ├── redis-sentinel -> redis-server └── redis-server ##redis服务器的daemon启动程序;
[root@bbs redis-2.8.24]# echo "export PATH=/usr/local/redis/bin/:$PATH" >>/etc/profile ##把命令路径作为环境变量
[root@bbs redis-2.8.24]# . /etc/profile ##生效
[root@bbs redis-2.8.24]# which redis-server /usr/local/redis/bin/redis-server
[root@bbs redis-2.8.24]# mkdir /usr/local/redis/conf -p   ##创建一个redis配置文件的存放目录
[root@bbs redis-2.8.24]# cp redis.conf /usr/local/redis/conf   ##拷贝一份配置文件到配置文件目录里去
[root@bbs redis-2.8.24]# redis-server /usr/local/redis/conf/redis.conf &   ##直接启动redis会报错; # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1‘ to /etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1‘ for this to take effect.

报上面的错是需要执行下面的命令:(或者把命令放到/etc/sysctl.conf里面去)

[root@bbs redis-2.8.24]# sysctl vm.overcommit_memory=1

[root@bbs redis-2.8.24]# redis-server /usr/local/redis/conf/redis.conf &   ##再次启动
[root@bbs redis-2.8.24]# echo never > /sys/kernel/mm/transparent_hugepage/enabled   ##如果还报错就执行;
[root@bbs redis-2.8.24]# lsof -i :6379 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME redis-ser 45549 root 4u IPv6 1287928 0t0 TCP *:6379 (LISTEN) redis-ser 45549 root 5u IPv4 1287930 0t0 TCP *:6379 (LISTEN)

关闭redis:

[root@bbs redis-2.8.24]# redis-cli shutdown

redis的启动与停止:

[root@48 ~]# redis-cli -h 127.0.0.1 -p 6379 -a rxXXXXX shutdown   ##停止数据库

[root@48 ~]# redis-server /usr/local/redis/conf/redis.conf & ##启动数据库

连接redis数据库:

[root@bbs redis-2.8.24]# redis-cli   ##成功
127.0.0.1:6379>

简单命令:
127.0.0.1:6379> set no002 xyp
OK
127.0.0.1:6379> get no002
"xyp

不交互模式创建:

[root@bbs redis-2.8.24]# redis-cli -h 10.10.10.20 -p 6379 set no001 lisi    ##创建 
OK

[root@bbs redis-2.8.24]# redis-cli -h 10.10.10.20 -p 6379 get no001 ##查看 "lisi"
[root@bbs redis-2.8.24]# redis-cli get no001 ##不用加ip地址和端口也可以 "lisi"
[root@bbs redis-2.8.24]# redis-cli del no001 ##删除命令 (integer) 1
[root@bbs redis-2.8.24]# redis-cli get no001 (nil)

字符串类型:
这是最简单的Redis类型,如果你只用这种类型,Redis就是一个可以持久的memcached服务器(注:memcache的数据仅保存在内存中,服务器重启后,数据将丢失)。
通常用set和get来设置和获取字符串值,值可以是任何种类的字符串(包括二进制数据),例如你可以在一个键下保存一副jpeg图片,值得长度不能超过1GB;


为php安装redi客户端扩展:
获取源码包:

[root@bbs tools]# wget https://github.com/nicolasff/phpredis/archive/master.zip

[root@bbs tools]# unzip master.zip

[root@bbs tools]# cd phpredis-master/
[root@bbs phpredis-master]#

[root@bbs phpredis-master]# /usr/local/php5/bin/phpize

[root@bbs phpredis-master]# ./configure --with-php-config=/usr/local/php5/bin/php-config

[root@bbs phpredis-master]# make &&make install

[root@bbs phpredis-master]# echo "extension = redis.so" >>/usr/local/php5/lib/php.ini     ##编辑配置文件

 

重启php-fpm:

[root@bbs phpredis-master]# killall php-fpm

[root@bbs phpredis-master]# /usr/local/php5/sbin/php-fpm

redis主从同步配置;
实验环境:
master 10.10.10.20
slave 10.10.10.30

两台服务器均安装redis服务,安装完成后开始配置:

[root@localhost redis-2.8.24]# vim /usr/local/redis/conf/redis.conf     ##编辑配置文件;

210 # slaveof <masterip> <masterport>
211 slaveof 10.10.10.20 6379 ##添加这一行,前面是主库的IP地址,后面是主库的端口;

[root@localhost redis-2.8.24]# redis-server /usr/local/redis/conf/redis.conf &   ##启动服务,会出现以下信息;
......
[78247] 10 Aug 20:48:11.036 * MASTER <-> SLAVE sync started     ##主从同步已开启;
[78247] 10 Aug 20:48:11.052 * Non blocking connect for SYNC fired the event.
[78247] 10 Aug 20:48:11.052 * Master replied to PING, replication can continue...
[78247] 10 Aug 20:48:11.057 * Partial resynchronization not possible (no cached master)
[78247] 10 Aug 20:48:11.070 * Full resync from master: ed74bac65a7f01d99d89a5adcbdd39fae63b3612:1
[78247] 10 Aug 20:48:11.151 * MASTER <-> SLAVE sync: receiving 98 bytes from master
[78247] 10 Aug 20:48:11.151 * MASTER <-> SLAVE sync: Flushing old data
[78247] 10 Aug 20:48:11.151 * MASTER <-> SLAVE sync: Loading DB in memory
[78247] 10 Aug 20:48:11.151 * MASTER <-> SLAVE sync: Finished with success

主库端的反应:
在slave开启的同时主库端会出现以下信息:

[root@bbs www]# [46172] 27 Aug 17:12:26.227 * Slave 10.10.10.30:6379 asks for synchronization
[46172] 27 Aug 17:12:26.227 * Full resync requested by slave 10.10.10.30:6379
[46172] 27 Aug 17:12:26.227 * Starting BGSAVE for SYNC with target: disk
[46172] 27 Aug 17:12:26.228 * Background saving started by pid 129139
[129139] 27 Aug 17:12:26.245 * DB saved on disk
[129139] 27 Aug 17:12:26.245 * RDB: 0 MB of memory used by copy-on-write
[46172] 27 Aug 17:12:26.313 * Background saving terminated with success
[46172] 27 Aug 17:12:26.313 * Synchronization with slave 10.10.10.30:6379 succeeded

测试:

[root@localhost redis-2.8.24]# redis-cli -h localhost -p 6379 monitor    ##现在从库上做个监控

主库操作:

[root@bbs www]# redis-cli
127.0.0.1:6379> set t1 xyp01
OK
127.0.0.1:6379> get t1
"xyp01

从库上查看和操作:

1470833827.396256 [0 10.10.10.20:6379] "SELECT" "0"
1470833827.396284 [0 10.10.10.20:6379] "set" "t1" "xyp01"

root@localhost redis-2.8.24]# redis-cli
127.0.0.1:6379> get t1
"xyp01"

  

或者远程连接从库查看:

[root@bbs www]# redis-cli -h 10.10.10.30 get t1
"xyp01"

功能统计:

[root@localhost redis-2.8.24]# redis-cli -h localhost -p 6379 info

# Server
redis_version:2.8.24
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:46a2cc67e9d6e198
redis_mode:standalone
......
# Clients
connected_clients:2
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:831312
used_memory_human:811.83K
used_memory_rss:8007680
used_memory_peak:831312
......

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1470834192
rdb_last_bgsave_status:ok
......

# Stats
total_connections_received:4
total_commands_processed:172
instantaneous_ops_per_sec:0
total_net_input_bytes:2609
total_net_output_bytes:61097
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.02
rejected_connections:0
sync_full:0

http://redis.io/commands    ##redis命令大全

redis设置密码:
主库:

[root@VM_17_42_centos conf]# vim redis.conf    ##编辑redis的配置文件
397 # requirepass foobared    ##在397行下面添加这么一行
398 requirepass rxXXXXX

配置完成后重启redis数据库;

配置从库的时候要先关闭数据库:

[root@VM_55_114_centos conf]# redis-cli shutdown ##关闭数据库

从库:

[root@VM_17_42_centos conf]# vim redis.conf ##编辑redis的配置文件
218 # masterauth <master-password> ##在218行下面添加这么一行
219 masterauth rxXXXXX ##指的是主库的认证密码,不然只改密码后启动从库会不停的报错;

397 # requirepass foobared ##在397行下面添加这么一行
398 requirepass rxXXXXX ##这行是修改从库的认证密码

http://www.cnblogs.com/sunziying/p/6560608.html    ##redis连接数设置

 

redis安装配置