redis扩展 需要安装redis客户端oG东方 会客户端吗

基于Netty的Redis客户端-Nedis
最近温习了一遍Redis命令,忧伤的是很多东西已交还给老师,正好赶上antirez大神在愚人节发布了Redis
3.0,Redis终于有了支持集群的正式版本,于是心血来潮决定自己实现一个Redis客户端来抚慰我这颗忧伤的心灵。
Jedis已经足够强大,它的网络连接是基于阻塞式IO,实现非常简单易懂,但是OIO和NIO相比性能上有劣势,于是决定通过NIO来实现和Redis服务器的网络连接,现在业界最优秀的NIO框架非Netty莫属了,正好以前也学过Netty框架,所以决定基于Netty来实现这个Redis客户端,这样还可以同时再次熟悉一下Netty,于是一个高大上的名字新鲜出炉-Nedis。关于命令的实现就没什么好纠结,完全参照Redis官方文档来就可以了,也可以参考Jedis代码。
由于本码农平时工作比较忙,在公司工作时是不可能抽时间来搞的,一没时间,大佬们各种催活,二是由于公司的信息安全政策,公司里面写的代码是拿不出来的。所以只有利用晚上下班时间和周末的业余时间来搞,工作日有2-3个小时的时间,大概10点开搞,到1点左右,周末由于要带娃做饭,也只能挤出3-4个小时出来,所以进展比较慢,从4月初到现在将近20天的时间终于完成了key、string、hash、list、set、
SortedSet的所有单机命令以及客户端分片(Sharding),其它的事务、lua脚本、集群等功能还未实现,留到后面版本再实现。
首先最优先的是要确定代码的基本骨架,骨架确定之后各个命令的实现就纯粹是工作量上的事了,事实上这种工作非常的机械。经过多番的修改重构最终确定了代码骨架,命令的基本流程,下面是Nedis中几个基础的组件:
NedisClient和ShardedNedis:该框架中的两个门面,分别处理单机命令和客户端key分片,对使用提供了所有命令的调用接口,由于事务和集群等功能还没有提供,所有未来可能会增加TransationNedis和ClusterNedis等。所有命令最终都会经过Nedis转发,SharedNedis最终也会调用NedisClient。NedisClient的构建采用build模式,通过NedisClientBuilder来构建,关于客户端参数,目前设计得比较粗糙,参数较少,目前可以给NedisClient设置如下参数:
connectTimeoutMills
连接超时时间
eventLoopGroupSize
Netty框架的线程池大小
tcpNoDelay
是否设置TCP_NO_DELAY标识
connectionPoolSize
连接池大小
maxConnectionIdleTimeInMills
空闲连接超时时间
minIdleConnections
最小空闲连接数量
ConnectionPool:为了减少重复建连开销,采用连接池复用连接,命令最终通过连接池中的连接发送,通过IdleStateHandler监控空闲的连接。ProtocolDecoder:读取命令响应,对响应进行解析,继承自ReplayingDecoder处理分包传输,命令响应的解析最终委托给RedisProtocol进行处理。ResponseReceiver:接收ProtocolDecoder的响应解析结果,把结果交给ResponeAdapter进行适配,并把最终适配后的结果通过ResponseCallback回调返回给命令调用者,处理完成之后最终把连接返回到连接池。ResponeAdapter:把ProtocolDecoder解析出来的结果适配成对使用者比较友好的类型。ResponseCallback:因为Netty是一个异步处理框架,所以我们提供的命令接口不会阻塞直到命令返回(这样就无法体现NIO和Netty的优势了),而是在命令响应达到时通过ResponseCallback回调通知调用者。
下面是命令发送和响应的时序:
就目前已完成的代码来讲,Nedis中的单测代码远远超出了框架代码,目前的单测代码8000行左右而框架代码只有4000左右,而且最关键的是由于时间有限,测试代码并没有覆盖所有路径,有些命令特别是分片相关的命令接口还没写单测(那些没完成的单元测试代码只有等后面慢慢补上),所以覆盖率估计50%都不到,也就是说正常的比例单元测试代码:框架代码应该大于4:1,是不是很震惊,但是测试代码是必须要写的,这是一件一劳永逸的事儿,有了单测代码后面改代码时很容易验证修改的代码有没有问题会不会引发其它问题,当然前提是测试代码要可靠。
对我们的命令测试,有两个问题:
在测试命令时可能要依赖其它命令提供数据,比如我想测一个get命令,那么在之前需要通过set命令构造数据来支持get命令的测试,这就要求在get命令执行之前必须得先执行set命令,但是由于Netty框架通过线程池来执行任务,set命令和get命令可能会由不同的线程来执行,这样的话命令执行可能会乱序,即使set命令再get命令之前调用,也不能完全保证set命令先到达服务器,所有在调用set命令接口需要做一个小停顿再调用get命令接口,来保证set命令在get命令之前执行,这个停顿时间一般100ms就够了(我设的是200ms)。因为Netty框架是异步的,所有调用命令接口时不会发生阻塞,所以为了验证测试效果,需要保证单测方法在响应回来之前不会结束,我们通过一个同步控制器CountDownLatch,在方法结束前调用await方法进行阻塞,在最后一个响应回来时调用countDown释放,嗯,灰常不优雅。
下面是一个测试方法,controller就是上面说的CountDownLatch,CMD_PAUSE_TIME是停顿时间,它是一个放在基类中的常量,可以随便修改,修改之后所有的测试方法都会生效:
public void testSet() {
doCmdTest(new TestAction() {
public void doTest() throws InterruptedException, NedisException {
client.flushAll(null);
Thread.sleep(CMD_PAUSE_TIME);
client.set(new ResponseCallback&String&() {
public void done(String result) {
assertEquals(&OK&, result);
public void failed(Throwable cause) {
fail(cause);
}, &key1&, &value1&);
Thread.sleep(CMD_PAUSE_TIME);
client.set(new ResponseCallback&String&() {
public void done(String result) {
assertEquals(&OK&, result);
controller.countDown();
public void failed(Throwable cause) {
fail(cause);
controller.countDown();
}, &key1&, &value2&);
本着人人为我我为人人,框架代码已经上传到github:https://github.com/chenyihan/nedis,代码需要有JDK7进行编译,接下来还会实现剩余的功能。非常惭愧从github上搞到过很多宝贵的资源,但是迄今为止只共享过两份代码,以后一定要为github多多贡献,大家共同进步。redis配置认证密码
redis配置密码
1.通过配置文件进行配置
yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到
#requirepass foobared去掉行前的注释,并修改密码为所需的密码,保存文件
requirepass myRedis重启redis
sudo service redis restart
sudo service redis stop
sudo redis-server /etc/redis.conf这个时候尝试登录redis,发现可以登上,但是执行具体命令是提示操作不允许
redis-cli -h 127.0.0.1 -p 6379
redis 127.0.0.1:6379&
redis 127.0.0.1:6379& keys *
(error) ERR operation not permitted
redis 127.0.0.1:6379& select 1
(error) ERR operation not permitted
redis 127.0.0.1:6379[1]& 尝试用密码登录并执行具体的命令看到可以成功执行
redis-cli -h 127.0.0.1 -p 6379 -a myRedis
redis 127.0.0.1:6379& keys *
1) &myset&
2) &mysortset&
redis 127.0.0.1:6379& select 1
redis 127.0.0.1:6379[1]& config get requirepass
1) &requirepass&
2) &myRedis&
2.通过命令行进行配置
redis 127.0.0.1:6379[1]& config set requirepass my_redis
redis 127.0.0.1:6379[1]& config get requirepass
1) &requirepass&
2) &my_redis&无需重启redis
使用第一步中配置文件中配置的老密码登录redis,会发现原来的密码已不可用,操作被拒绝
redis-cli -h 127.0.0.1 -p 6379 -a myRedis
redis 127.0.0.1:6379& config get requirepass
(error) ERR operation not permitted使用修改后的密码登录redis,可以执行相应操作
redis-cli -h 127.0.0.1 -p 6379 -a my_redis
redis 127.0.0.1:6379& config get requirepass
1) &requirepass&
2) &my_redis
尝试重启一下redis,用新配置的密码登录redis执行操作,发现新的密码失效,redis重新使用了配置文件中的密码
sudo service redis restart
Stopping redis-server:
Starting redis-server:
redis-cli -h 127.0.0.1 -p 6379 -a my_redis
redis 127.0.0.1:6379& config get requirepass
(error) ERR operation not permitted
redis-cli -h 127.0.0.1 -p 6379 -a myRedis
redis 127.0.0.1:6379& config get requirepass
1) &requirepass&
2) &myRedis&
除了在登录时通过 -a 参数制定密码外,还可以登录时不指定密码,而在执行操作前进行认证。
redis-cli -h 127.0.0.1 -p 6379
redis 127.0.0.1:6379& config get requirepass
(error) ERR operation not permitted
redis 127.0.0.1:6379& auth myRedis
redis 127.0.0.1:6379& config get requirepass
1) &requirepass&
2) &myRedis&
3.master配置了密码,slave如何配置
若master配置了密码则slave也要配置相应的密码参数否则无法进行正常复制的。
slave中配置文件内找到如下行,移除注释,修改密码即可
#masterauth
mstpasswordRedis安装前的Linux环境准备
Redis的安装是比较简单的,但是很多不了解Redis的朋友总是想把它安装到Windows环境下,这样做是很不适合Redis在真实生产环境的使用情况。真实的生产环境是,所以在平时学习时最好也使用Linux环境。这里就介绍一下使用VMware软件安装Linux系统,以及安装Redis时需要使用的其他软件的安装。
1、所需软件
VMware虚拟机软件的下载,版本号是:VMware? Workstation 12 PLinux版本选择使用CenterOS,是非常适合学习使用的一个Linux版本,版本号:CentOS-6.8-i386-LiveCD,该镜像的Linux是CentOS6.8 32位;SSH工具用来连接Linux和与Linux进行文件传输的,本文选用的是Xshell5。在网上找不到合适的版本的朋友也可以给我留言。
2、CentOS虚拟机安装
VMware和Xshell5的安装都是比较简单这里就不叙述了,安装完成后打开VMware。众所周知,Linux是一个操作系统,是一套依赖底层硬件系统的软件系统,那么为了让CentOS能够运行起来我们就需要一套硬件系统,即一台电脑机器。VMvare就能很好地为我们提供一套虚拟的供CentOS运行的硬件系统,简称&虚拟机&。现在我们便开始创建一台适合CentOS运行的虚拟机。(1)开始虚拟机创建向导,自定义创建一个虚拟机
(2)选择虚拟机硬件兼容性
(3)为虚拟机安装操作系统,选择稍后安装
(4)选择虚拟机的操作系统类型
(5)为新建的虚拟机命名及设置虚拟机的保存位置
(6)虚拟机的处理器配置,可根据自己电脑的性能设置数量
(7)虚拟机的内存配置,可根据自己的电脑性能设置
(8)选择网络类型
(9)选择I/O控制器类型
(10)选择磁盘类型
(11)选择创建一个新的磁盘
(12)设置磁盘大小
(13)指定磁盘文件
(14)终于完成!
经过上面的14步我们便把虚拟机的硬件系统创建完成,注意仅是硬件系统,还没有装Linux操作系统!下面我们便把CentOS操作系统给安装上。
至此Linux系统准备完毕,点击&开启此虚拟机&,耐心等待,便以默认用户的身份打开了CentOS。
3、对CentOS进行相关设置
为了能够顺利安装Redis,我们还需要在CentOS中安装一些其他的软件,具体操作如下。
打开我们的命令窗口,使用如下命名(1)sudo su - 切换成root用户(2)yum -y install lrzsz 保证连网的情况下,安装lrzsz,用于本地windows和centOS虚拟机进行文件传输(3)rpm -qa gcc 查找系统是否安装gcc编译环境,无任何显示表示没有安装(4)yum -y install gcc gcc-c++ 安装gcc编译环境,用来执行make命令(5)gcc -v 查看gcc的版本号(6)passwd 修改Root用户的登录密码(7)rpm -qa | grep ssh 查看是否安装sshd (8)yum install openssh-server 安装sshd (9)service ssh restart 重启sshd服务 service sshd start 启动服务 service sshd stop 停止服务 netstat -antp | grep sshd 查看端口(10)/etc/rc.d/init.d/iptables stop chkconfig iptables off 关闭防火墙 chkconfig --list iptables 查看防火墙是否关闭(11)ifconfig 查看虚拟机IP 我的ip:192.168.186.128 经过上面的设置CentOS环境已经准备完毕!现在打开我们的Xshell5 连接上centOS虚拟机。小贝_redis安装与部署
安装Redis服务及php Redis拓展
一、Redis相关文件下载
二、Redis安装
三、phpredis拓展安装
一、本文档相关文件下载
1、Redis下载地址: https://redis.io/download
2、php Redis拓展下载地址: https://pecl.php.net/package/redis
3、php下载地址: https://php.net/downloads.php
(备注: 本文档下载的是redis为redis-3.0.2.tar.gz而 php redis拓展为redis-2.2.7.tgz)
4、本测试机为 CentOS release 6.3 (Final)
php环境为php-5.6.11
二、安装redis服务
1、安装Redis服务
a、tar -zxf redis-3.0.2.tar.gz
b、make && make install
2、安装成功后,src会出现如下等可执行文件
(备注: mkreleasehdr.sh、redis-check-dump、redis-cli、redis-benchmark、redis-check-aof、redis-sentinel、redis-server、redis-trib.rb
其中: redis-server则是启动redis服务的服务端
redis-cli则是链接redis的客户端
3、启动服务及测试redis
3.1、建立目录bin和etc (bin存放redis可以执行文件、etc则存放redis配置文件)
[root@hadoop src]# mv mkreleasehdr.shredis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinelredis-server redis-trib.rb ../bin/
[root@hadoop redisd]# mv redis.conf etc/
3.2、启动redis
[root@hadoop redisd]# ./bin/redis-server./etc/redis.conf
3.3、检查redis是否启动 (redis默认端口为6379)
3.4、使用内置客户端操作redis
3.5、设置redis自启动
修改/etc/rc.local文件
/usr/local/redisd/bin/redis-server /usr/local/redisd/etc/redis.conf&/dev/null &
3.6、关闭redis
[root@hadoop redisd]# ./bin/redis-clishutdown
4、常见异常及处理
异常一:make[2]: cc: Command not found
异常原因:没有安装gcc
解决方案:yum installgcc-c++
异常二:zmalloc.h:51:31: error: jemalloc/jemalloc.h: Nosuch file or directory
异常原因:一些编译依赖或原来编译遗留出现的问题
解决方案:make distclean。清理一下,然后再make。
异常三:在make成功以后,需要make test。在make test出现异常。
couldn't execute &tclsh8.5&:no such file or directory
异常原因:没有安装tcl
解决方案:yum install -ytcl
三、安装phpredis服务
1、解压压缩包
tar &zxf php redis拓展为redis-2.2.7.tgz
2、进入解压的目录,执行phpize
[root@hadoop phpredis]#/usr/local/php/bin/phpize
3、安装phpredis拓展
[root@hadoopphpredis]# ./configure --enable-redis --enable-redis-igbinary--with-php-config=/usr/local/php/bin/php-config
[root@hadoopphpredis]# make && make install
4、修改php.ini文件,载入对应redis拓展
5、重启php,验证是否安装redis拓展
[root@hadoop etc]# pkill -9 php
[root@hadoop etc]# ../sbin/php-fpm
6、使用php,测试redis服务
echo'xiaobei';
$redis= new Redis();
//进行连接
$redis-&connect('127.0.0.1',6379);
$redis-&set('name','redisis ok');
echo$redis-&get('name');
7、常见异常及处理
异常一: checking for igbinary includes...configure: error: Cannot find igbinary.h
下载https://pecl.php.net/get/igbinary-1.1.1.tgz
tar -xzvf igbinary-1.1.1.tgz
cd igbinary-1.1.1
./configure --with-php-config=/usr/local/php/bin/php-config--enable-igbinary
make installphp与redis扩展安装和使用-Redis学习笔记六
1. 安装php的redis扩展
注明:安装的环境为lnmp,php的版本为
Version 5.4.36
把phpredis扩展软件 和 其依赖软件上传到linux里边:
解压phpredis
[root@fengniu020 soft]# tar zxvf phpredis.tar.gz
在redis扩展解压软件目录执行指令/usr/bin/phpize
作用:可以把redis扩展反过来安装进php里边,可以给redis扩展做一些php相关的配置。
[root@fengniu020 soft]# cd phpredis
[root@fengniu020 phpredis]# ls
acinclude.m4
debian.control
Makefile.objects
redis_array.h
aclocal.m4
config.nice
redis_array_impl.c
arrays.markdown
config.status
install-sh
mkdeb-apache2.sh
redis_array_impl.h
autom4te.cache
config.sub
mkinstalldirs
redis_session.c
configure.in
redis_session.h
config.guess
config.w32
package.xml
php_redis.h
run-tests.php
config.h.in
Makefile.fragments
README.markdown
serialize.list
config.log
Makefile.global
redis_array.c
[root@fengniu020 phpredis]# whereis phpize
phpize: /usr/bin/phpize /usr/share/man/man1/phpize.1.gz
[root@fengniu020 phpredis]# /usr/bin/phpize
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
[root@fengniu020 phpredis]#
如果执行时出现下述错误,则需要安装依赖包autoconf
安装autoconf依赖软件:
autoconf依赖软件安装成功:
重新执行phpize,
phpize指令执行成功:
为redis扩展软件做configure配置:
查看编译安装帮助
[root@fengniu020 phpredis]# ./configure --help
查找php-config路径和配置phpredis
[root@fengniu020 phpredis]# whereis php-config
php-config: /usr/bin/php-config /usr/share/man/man1/php-config.1.gz
[root@fengniu020 phpredis]# ./configure --with-php-config=/usr/bin/php-config
执行编译安装
[root@fengniu020 phpredis]# make && make install
make && make install执行成功:
查看下安装的扩展为 redis.so
redis相对php的扩展文件生成ok:
Installing shared extensions:
/usr/lib64/php/modules/
[root@fengniu020 phpredis]# /usr/lib64/php/modules/
-bash: /usr/lib64/php/modules/: is a directory
[root@fengniu020 phpredis]# ls /usr/lib64/php/modules/
pdo_odbc.so
xmlreader.so
fileinfo.so
mbstring.so
pdo_sqlite.so
sqlite3.so
xmlwriter.so
memcache.so
pdo_dblib.so
[root@fengniu020 phpredis]#
给php配置文件(/etc/php.ini)增加redis的扩展:
[root@fengniu020 fotest_niufeecms]# vim /etc/php.ini
extension = redis.so
重启下php-fpm
[root@fengniu020 phpredis]# service php-fpm restart
Stopping php-fpm:
Starting php-fpm:
写一个测试文件查看下是否安装了phpredis扩展
访问下localhost/test.php
扩展安装成功

我要回帖

更多关于 yum安装redis客户端 的文章

 

随机推荐