redis作为一个key-value数据库在近年来非常火爆,尤其是在大数据和云计算发展迅速的今天。同样redis也成为了开发人员必学 必须使用的一个工具。同时redis在数据储存时支持持久储存和内存储存,既能够保证数据存取的快速性也能够保证数据的持久性。 key-value数据库发展的历史非常长,在很早之前memcached作为一个在生产环境中使用的key-value类型的数据库,经常被当做 缓存来使用。但是redis是对memcached所存在的不足的弥补。下边我来分享下redis在PHP中的安装及使用,也是因为最近的课程 促使了我写这样一个文档的想法。
redis的官方安装包并不支持windows系统的使用。但是有团队已经开发了redis的windows适配的服务端和客户端,一般情况下我们是把redis服务器单独配置的,而且redis是支持网络的,所以最好还是安装在Linux系统的专门redis服务器,如果考虑到主从同步redis提供的方法也很容易实现。
redis在windows下的安装包的下载地址如下。
https://github.com/ServiceStack/redis-windows/tree/master/downloads
建议大家下载相对应的版本,下载下来xxxxx.zip后需要解压使用。我下载的是redis-latest.zip也就是redis3.0.5版本,对于版本的下载不要下载太新的版本,以免没有对应的dll扩展。
下载后目录的结构如下:
在这些文件中只要注意redis-server.exe是redis在windows系统的服务端,如果要使用redis这个脚本必须点击运行而且不能关闭。如果出现以下的界面就表示运行正常了。默认情况host是127.0.0.1端口是6379,当然这个可以自己来修改。
如果要在客户端测试redis服务是否正常运行了可以打开刚刚解压的包中的redis-cli来测试
可以输入以下内容来测试redis的运行效果。
SET username "weiyongqiang"
GET username
如果正常的输出"weiyongqiang"就说明redis服务启动成功了,下边就是在PHP中安装redis扩展了。
在PHP中安装扩展模块一般是添加dll文件来实现的。那我们首先要找到redis的dll扩展。
在该地址下载php_redis.dll:http://windows.php.net/downloads/pecl/snaps/redis/
在下载之前需要看一下你所使用的PHP的这些信息,要和你要下载的扩展对应起来。
我的PHP版本是5.5.30而且我的PHP是nts(非线程安全的),是VC11,x86的所以我下载的扩展为
下载解压后需要将其中的php_redis.dll放置在PHP的ext目录下。如果不知道怎么样找ext目录可以再PHPinfo的输出中看loaded configurationfile所在的目录在其中就可以看到ext
复制到ext后还需要打开php.ini来修改其中的扩展选项。php.ini的位置就是我上边所截图的位置,打开php.ini后在任意位置添加
extension=php_redis.dll
然后重启服务器软件,如果使用的apache就使用apache重启的方法,如果是nginx就使用nginx重启的方法。
重启后再输出下phpinfo()在其中查找是否有redis扩展的信息
只有出现该选项才表示扩展安装成功。
public function index(){
$redisObj = new \Redis();
$redisObj->connect('127.0.0.1',6379);
$redisObj->set('name', '魏永强');
$name = $redisObj->get('name');
dump($name);
}
如果输出为
string(9) "魏永强"
就表示安装成功了。注意:我的测试中使用了thinkphp框架,如果不使用框架要在输出的位置把dump()替换成print_r($name)来输出或者直接用echo也是可以的。
在redis中如果要读写数组等hash类型的数据就不能简单的使用set和get了。redis的API中为我们提供了hash类型数据的读写方法如下:
public function index(){
$redisObj = new \Redis();
$redisObj->connect('127.0.0.1',6379);
$redisObj->hMset('userinfo', array('name'=>'魏永强','age'=>22));
$info = $redisObj->hGetAll('userinfo');
dump($info);
}
对于hash类型的操作方法分别是
public function hMset( $key, $hashKeys )
读取是方法为
public function hGetAll( $key )
还有更多的关于PHP操作redis的方法请查看官方提供的手册。当然如果使用框架我们也可以使用框架为我们封装好的redis的使用类来操作。比如ThinkPHP框架为我们已经封装好了redis驱动,这样无论我们存取的数据类型是何种类型,在写入时我们只要使用$obj->set(key,value);读取时使用$obj->get(key);来读取显得非常方便。