redis部署手册

一、redis介绍

1、redis简介

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

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

redis是一种非关系型数据存储工具,这区别于传统的关系型数据库,类似于memcache,并且其内部集成了对list(链表)、set(集合)的操作,可以很方便快速的处理数据(像插入、删除list取交集 并集 差集等),这极大的减轻了底层数据库的压力,并且给用户更快的响应速度。

redis的出现,在一定程度上弥补了MC这类key-value内存缓存服务的不足,在部分场合可以对关系数据库起到很好的补充作用;redis提供了Python,Ruby,Erlang,PHP客户端,使用很方便;redis官方文档如下:

http://www.redis.io/documentation

http://www.redis.cn

2、redis的优点

  • 性能很高:redis能支持超过100K+每秒的读写频率(10万+)
  • 丰富的数据类型:redis支持二进制的Strings,Lists,Hashes,Sets及Orderd Sets等数据类型操作
  • 原子:redis的所有操作都是原子性的,同时redis还支持对几个操作全并后的原子性执行
  • 丰富的特性:redis还支持publish/subscribe,通知key过期等等特性
  • redis支持异步机制主从复制

3、redis的应用场景

    传统的MySQL + Memcached的网站架构遇到的问题:

MySQL数据库实际上是适合进行海量数据存储的,加上通过MC将热点数据存放到内存cache里,达到加速数据访问的目的;绝大部分公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,很多问题就会暴漏出来:

1.  需要不断的对MySQL进行拆库拆表,MC也需要不断跟着扩容,扩容和维护工作占据大量开发运维时间;

2.  MC与MySQL数据库数据一致性问题是个老大难题;

3.  MC数据命中率低或down机,会导致大量访问直接穿透到数据库,导致MySQL无法支持访问;

4.  跨机房cache同步一致性问题

    redis的最佳应用场景:

1.  redis最佳适用场景是全部数据in-memory

2.  redis更多场景是作为MC的替代品来使用

3.  支持持久化

4.  当需要除key/value之外的更多数据类型支持时,使用redis更合适

5.  需要负载均衡的场景(redis主从同步)

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

对Redis数据库小结:

1.  提高了DB的可扩展性,只需要将新加的数据放到新加的服务器上就可以了;

2.  提高了DB的可用性,只影响到需要访问的shard服务器上的数据的用户;

3.  提高了DB的可维护性,对系统的升级和配置可以按shard一个个来搞,对服务产就是灾难;

4.  当Redis物理内存使用超过内存总容量的3/5时,就会开始比较危险了,就开始做swap,内存碎片大;

5.  当达到最大内存时,会清空带有过期时间的key,即使key未到过期时间;

6.  redis与DB同步写的问题,先写DB,后写redis,因为写内存基本上没有问题;

二、redis部署

1、下载redis源码包

[[email protected] tools]# wget http://download.redis.io/releases/redis-2.8.9.tar.gz
--2015-06-04 04:03:10--  http://download.redis.io/releases/redis-2.8.9.tar.gz
Resolving download.redis.io...109.74.203.151
Connecting todownload.redis.io|109.74.203.151|:80... connected.
HTTP request sent, awaiting response...200 OK
Length: 1097369 (1.0M)[application/x-gzip]
Saving to: “redis-2.8.9.tar.gz”
 
100%[=======================================================================================>]1,097,369   4.52K/s   in 2m 45s 
 
2015-06-04 04:06:05 (6.49 KB/s) -“redis-2.8.9.tar.gz” saved [1097369/1097369]

2、解压并编译安装

# tar fxzredis-2.8.9.tar.gz 
[[email protected] tools]# cdredis-2.8.9
[[email protected] redis-2.8.9]# lessREADME     -->    查看安装等信息的详细手册
Where to find complete Redisdocumentation?
-------------------------------------------
 
This README is just a fast"quick start" document. You can find more detailed
documentation athttp://redis.io
 
Building Redis
--------------
 
Redis can be compiled and usedon Linux, OSX, OpenBSD, NetBSD, FreeBSD.
We support big endian andlittle endian architectures.
 
It may compile on Solarisderived systems (for instance SmartOS) but our
support for this platform is"best effort" and Redis is not guaranteed to
work as well as in Linux, OSX,and *BSD there.
 
It is as simple as:
 
    % make
 
You can run a 32 bit Redisbinary using:
 
    % make 32bit
 
After building Redis is a goodidea to test it, using:
 
    % make test
 
Fixing problems building 32bit binaries
:
[[email protected] redis-2.8.9]#make MALLOC=jemalloc      # 开始编译
cd src && make all
make[1]: Entering directory `/application/tools/redis-2.8.9/src‘
rm -rf redis-serverredis-sentinel redis-cli redis-benchmark redis-check-dump redis-check-aof *.o*.gcda *.gcno *.gcov redis.info lcov-html
(cd ../deps && makedistclean)
make[2]: Entering directory`/application/tools/redis-2.8.9/deps‘
(cd hiredis && makeclean) > /dev/null || true
(cd linenoise && makeclean) > /dev/null || true
(cd lua && make clean)> /dev/null || true
(cd jemalloc && [ -fMakefile ] && make distclean) > /dev/null || true
(rm -f .make-*)
make[2]: Leaving directory`/application/tools/redis-2.8.9/deps‘
(rm -f .make-*)
echo STD=-std=c99 -pedantic>> .make-settings
... 中间忽略 ...
Hint: To run ‘make test‘ is agood idea ;)
make[1]: Leaving directory`/application/tools/redis-2.8.9/src‘
[[email protected] redis-2.8.9]# makePREFIX=/application/redis-2.8.9 install    
# 安装到/application/目录
cd src && make install
make[1]: Entering directory`/application/tools/redis-2.8.9/src‘
 
Hint: To run ‘make test‘ is agood idea ;)
 
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
make[1]: Leaving directory`/application/tools/redis-2.8.9/src‘
 
# 创建软连接,并查看
[[email protected] redis-2.8.9]# ln-s /application/redis-2.8.9/ /application/redis
[[email protected] redis-2.8.9]# ll/application/redis
lrwxrwxrwx. 1 root root 25Jun  4 20:05 /application/redis ->/application/redis-2.8.9/
# 查看redis的目录结构,并简单说明:
[[email protected] redis-2.8.9]# LANG=EN
[[email protected] redis-2.8.9]# tree/application/redis/bin/
/application/redis/bin/
|-- redis-benchmark     #   redis性能测试工具,测试redis在你的系统及你的配置下的读写性能
|-- redis-check-aof     #   更新日志检查
|-- redis-check-dump    #   用于本地数据库检查
|-- redis-cli       #   redis命令行操作工具;当然,也可以用telnet根据其纯文本协议来操作
└-- redis-server   #   redis服务器的daemon启动程序
0 directories, 5 files

3、配置并启动redis服务

a)  配置redis环境变量
[[email protected] ~]# exportPATH=/application/redis/bin/:$PATH     
#   该行只是临时生效redis命令的环境变量
[[email protected] ~]#redis-server      #   在命令行下测试该命令,如果能tab键出来,表示为成功; 
[[email protected] ~]# echo"PATH=/application/redis/bin/:$PATH" >>/etc/profile    
# 写入到配置文件,使其永久生效
[[email protected] ~]# tail -1/etc/profile     #   查看是否添加正确
PATH=/application/redis/bin/:/application/redis/bin/:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[[email protected] redis-2.8.9]# ./etc/profile      #   执行后,使配置立即生效
[[email protected] redis-2.8.9]# whichredis-server #  查看是否有redis-server命令及位置
/application/redis/bin/redis-server
b)查看命令帮助
[[email protected] redis-2.8.9]# redis-server--help
Usage: ./redis-server[/path/to/redis.conf] [options]
       ./redis-server - (read config fromstdin)
       ./redis-server -v or --version
       ./redis-server -h or --help
       ./redis-server --test-memory<megabytes>
 
Examples:
       ./redis-server (run the server withdefault conf)
       ./redis-server /etc/redis/6379.conf
       ./redis-server --port 7777
       ./redis-server --port 7777 --slaveof127.0.0.1 8888
       ./redis-server /etc/myredis.conf--loglevel verbose
 
Sentinel mode:
       ./redis-server /etc/sentinel.conf--sentinel
c)启动redis服务
[[email protected] ~]# mkdir/application/redis/conf   
# 1)创建redis的配置文件目录
[[email protected] ~]# cp/application/tools/redis-2.8.9/redis.conf /application/redis/conf/ 
# 2) 拷贝源码包目录下的redis.conf文件
[[email protected] ~]# sysctlvm.overcommit_memory=1   
# 3) 执行sysctl命令,分配内存大小
vm.overcommit_memory = 1
[[email protected] ~]# redis-server/application/redis/conf/redis.conf &    # 启动服务
[1] 15623
[[email protected] ~]# [15623] 04 Jun20:35:02.093 * Increased maximum number of open files to 10032 (it wasoriginally set to 1024).
                _._                                                 
           _.-``__ ‘‘-._                                             
      _.-``   `.  `_.  ‘‘-._           Redis 2.8.9 (00000000/0) 64 bit
  .-`` .-```. ```\/    _.,_ ‘‘-._                                   
 (   ‘      ,       .-` | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|‘` _.-‘|     Port: 6379
 |   `-._   `._    /    _.-‘    |     PID: 15623
  `-._   `-._  `-./  _.-‘   _.-‘                                  
 |`-._`-._   `-.__.-‘    _.-‘_.-‘|                                  
 |   `-._`-._        _.-‘_.-‘    |          http://redis.io        
  `-._   `-._`-.__.-‘_.-‘    _.-‘                                   
 |`-._`-._   `-.__.-‘    _.-‘_.-‘|                                  
 |   `-._`-._        _.-‘_.-‘    |                                  
  `-._   `-._`-.__.-‘_.-‘    _.-‘                                   
      `-._   `-.__.-‘    _.-‘                                       
          `-._        _.-‘                                           
              `-.__.-‘                                               
 
[15623] 04 Jun 20:35:02.097 #Server started, Redis version 2.8.9
[15623] 04 Jun 20:35:02.097 *The server is now ready to accept connections on port 6379
[[email protected] ~]# lsof-i:6379  #查看redis是否启动
COMMAND     PID USER  FD   TYPE DEVICE SIZE/OFF NODENAME
redis-ser 15623 root    4u IPv6  31395      0t0 TCP *:6379 (LISTEN)
redis-ser 15623 root    5u IPv4  31397      0t0  TCP*:6379 (LISTEN)

如果不执行 sysctl vm.overcommit_memory=1 回提示如下错误信息:

[15558] 04 Jun 20:16:37.324 #Server started, Redis version 2.8.9
[15558] 04 Jun 20:16:37.325 #WARNING overcommit_memory is set to 0! Background save may fail under lowmemory condition. To fix this issue add ‘vm.overcommit_memory = 1‘ to /etc/sysctl.conf andthen reboot or run the command ‘sysctl vm.overcommit_memory=1‘ for this to take effect.

关闭redis服务

[[email protected] ~]# redis-clishutdown
[15623] 04 Jun 20:45:24.974 #User requested shutdown...
[15623] 04 Jun 20:45:24.974 *Saving the final RDB snapshot before exiting.
[15623] 04 Jun 20:45:24.979 *DB saved on disk
[15623] 04 Jun 20:45:24.979 #Redis is now ready to exit, bye bye...
[1]+  Done                    redis-server/application/redis/conf/redis.conf

4、php扩展redis客户端服务

1)下载redis客户端程序
[[email protected] tools]# wgethttp://github.com/nicolasff/phpredis/archive/master.zip 
--2015-06-03 06:06:53-- http://github.com/nicolasff/phpredis/archive/master.zip
Connecting tocodeload.github.com|192.30.252.144|:443... connected.
HTTP request sent, awaitingresponse... 200 OK
Length: unspecified[application/zip]
Saving to: “master.zip”
[                     <=>                           ] 149,906     18.2K/s  in 8.1s    
2015-06-03 06:07:06 (18.2KB/s) - “master.zip” saved [149906]
2) 查看并解压缩
[[email protected] tools]# lsmaster.zip 
master.zip
[[email protected] tools]# unzipmaster.zip
3) 生成phpize文件
[[email protected] tools]# cdphpredis-master/
[[email protected] phpredis-master]# /application/php/bin/phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
4)编译安装
[[email protected] phpredis-master]# ./configure--with-php-config=/application/php/bin/php-config
... 中间省略 ...
creating libtool
appending configuration tag"CXX" to libtool
configure: creating./config.status
config.status: creatingconfig.h
# 出现上面3条信息,表示安装成功;接下来进行编译
[[email protected] phpredis-master]#make && make install
# 提示下面信息,表示编译安装成功,并记录该信息;后面做php.ini配置文件所使用
Installing sharedextensions:    /application/php-5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
5) 修改php.ini配置文件,内容如下:
[[email protected] ~]# ll/application/php/lib/php/extensions/no-debug-non-zts-20090626/
total 1156
-rwxr-xr-x. 1 root root 246672Jun  2 01:10memcache.so
-rwxr-xr-x. 1 root root 931913Jun  3 06:18redis.so
[[email protected] ~]# echo"extension = redis.so" >>/application/php/lib/php.ini 
[[email protected] ~]# tail -1/application/php/lib/php.ini                               
extension = redis.so
6) 重启php-fpm,并刷新浏览器查看
[[email protected] ~]# /application/php/sbin/php-fpm

补充 php扩展查看被加载:

[[email protected] ~]#/application/php/bin/php -m
[PHP Modules]
...
memcache
redis
session
...
[ZendModules]

5、安装redis管理工具phpRedisAdmin

1)下载phpredisadmin客户端
[[email protected]]# git clone https://github.com/ErikDubbelboer/phpRedisAdmin.git
Initializedempty Git repository in /application/tools/phpRedisAdmin/.git/
remote:Counting objects: 527, done.
remote: Total527 (delta 0), reused 0 (delta 0), pack-reused 527
Receivingobjects: 100% (527/527), 183.89 KiB | 60 KiB/s, done.
Resolvingdeltas: 100% (259/259), done.
2) cd到phpRdisAadmin目录,下载predis.git文件
[[email protected]]# cd phpRedisAdmin
[[email protected] phpRedisAdmin]#git clone https://github.com/nrk/predis.git vendor
============================================================================================================
查看一下README.markdown说明
[[email protected] phpRedisAdmin]#cat README.markdown
 
[[email protected] phpRedisAdmin]#git submodule init
[[email protected] phpRedisAdmin]#git submodule update
3)把phpRedisAdmin目录移到站点目录下【/data/bbs/目录内】
[[email protected]]# mv phpRedisAdmin /data/bbs/
4)修改redis客户端的config配置文件
[[email protected] ~]#vim /data/bbs/phpRedisAdmin/includes/config.sample.inc.php
<?php
//Copy this file to config.inc.php and make changes to that file tocustomize your configuration.
 
$config = array(
  ‘servers‘ => array(
    array(
      ‘name‘   => ‘172.16.1.30‘, // Optional name.
      ‘host‘   => ‘172.16.1.30‘, // redis服务器的主机IP
      ‘port‘   => 6379,
      ‘filter‘ => ‘*‘,
    ),
... 下面全部省略 ...
5)修改完后,浏览器访问

测试:

a)在redis服务器上,创建一个key如下:

[[email protected]~]# redis-cli

127.0.0.1:6379>set t1 oldboy01

OK

127.0.0.1:6379>get t1

"oldboy01"

客户端查看信息:

b)在浏览器添加key t2 value liubaolong

tedis服务端查看信息:
[[email protected]~]# redis-cli
127.0.0.1:6379>get t2
"liubaolong"
时间: 2024-10-06 17:08:02

redis部署手册的相关文章

LVS+Redis部署手册

Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用于持久性. 相比许多键值数据存储,Redis拥有一套较为丰富的数据类型. Redis可以将数据复制到任意数量的从服务器. REDIS优势 异常快速:Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录. 支持丰富的数据类型:Redis支持最大多数开发人员已经知道像列表,集合,有序

System Center 2016 Data Protection Manager 部署手册

1. 环境描述 活动目录服务器 计算机名:SH-DC-01 Active Directory:365vCloud.net IP地址:192.168.100.2/24 操作系统:Windows Server 2016 中文标准版 已安装角色:ADDS活动目录服务 SCDPM服务器 计算机名:SH-SCDPM-01 Active Directory:365vCloud.net IP地址:192.168.100.7/24 操作系统:Windows Server 2016 中文标准版 已安装角色:无 2

System Center Configuration Manager,Version1606 部署手册

1. 环境描述 活动目录服务器 计算机名:SH-DC-01 所在域名或工作组名称:365vCloud.net IP地址:192.168.100.2/24 操作系统:Windows Server 2016 中文标准版 已安装角色:ADDS活动目录服务 SCCM中心站点服务器(CAS) 计算机名:SH-SCCM-01 所在域名或工作组名称:365vCloud.net IP地址:192.168.100.4/24 操作系统:Windows Server 2016 中文标准版 已安装角色:无 SCCM主站

storm集群部署手册

一.  准备 1.  硬件 三台装好RHEL6.7_x64的x86服务器,机器名如下 storm01 storm02 storm03 2.  软件 jdk-7u80-linux-x64.rpm apache-storm-1.0.1.zip 3.  zookeeper storm需用到zookeeper,开始安装前先安装好zookeeper,参照zookeeper集群部署手册 4.  Python storm需用到python,一般Linux都有python,这里需要python 2.6.6,如没

Redis学习手册(目录)

Posted on 2012-04-16 07:40 Stephen_Liu 阅读(29155) 评论(25) 编辑 收藏 为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后就是上手容易,操作简单.记得在刚刚接触Redis的时候,由于当时项目的工期相当紧张,留给我们做出选择的空间也是非常有限,一旦技术决策失误,造成的后果也比较严重.所以在做出决定之

Mysql上的RAC:Percona XtraDB Cluster负载均衡集群安装部署手册

 Percona XtraDB Cluster安装部署手册 引言 编写目的 编写此文档,供PerconaXtraDB Cluster部署时使用. 预期读者 系统维护人员及实施人员. 编制依据及参考资料 目标 通过阅读该手册,让读者明确PerconaXtraDB Cluster的安装.配置和维护情况,为后续数据库运维工作提供指导. 应用部署方案 环境准备 服务器列表 序号 IP 用途 HOSTNAME 操作系统 1 192.168.0.7 Percona XtraDB Cluster RedHat

LVS+MYCAT+读写分离+MYSQL主备同步部署手册

LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1         编辑my.cnf文件… 2 1.2.2         重启数据库… 2 1.3       锁定主数据库DDL操作… 2 1.4       主备已有数据同步… 2 1.5       停止从服务… 3 1.6       配置备用数据库… 3 1.6.1         编辑my

Redis学习手册

为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后就是上手容易,操作简单.记得在刚刚接触Redis的时候,由于当时项目的工期相当紧张,留给我们做出选择的空间也是非常有限,一旦技术决策失误,造成的后果也比较严重.所以在做出决定之前,我不仅快速的浏览了Redis官网文档,而且还熬夜搜集了很多网上的相关技术文章.在经过一通折腾之后,毅然决然的选择了它,现

phpredis中文手册——《redis中文手册》 php版(转)

redis中文手册:http://readthedocs.org/docs/redis/en/latest/ 本文是参考<redis中文手册>,将示例代码用php来实现,注意php-redis与redis_cli的区别(主要是返回值类型和参数用法). 目录(使用CTRL+F快速查找命令): Key String Hash List Set 键(Key) DEL KEYS RANDOMKEY TTL EXISTS MOVE RENAME RENAMENX TYPE EXPIRE EXPIREAT