[Redis]Redis安装和使用
一、Redis安装
Linux, MacOS系统安装
1. 下载Redis
http://download.redis.io/releases/
2. 解压压缩包,在目录中执行make命令进行源码编译
make
3. 安装redis服务
sudo make install
4. 新建配置文件redis.conf
参考源码中的redis.conf配置文件进行配置,修改daemonize(yes 后台运行) port(端口号 6379)
Window系统安装
Redis服务安装
https://github.com/dmajkic/redis/downloads
先下载redis安装包,在进行解压。将解压出来的x64或x86文件拷贝到某个目录中。
然后在该目录中打开cmd。运行redis-server
配置文件redis.conf中可以进行配置,在window平台上不能设置后台运行
也就是 daemonize 只能设置为 no
PHP扩展安装工具
1. PECL (The PHP Extension Community Library) 打包安装的PHP扩展库仓库
Redis扩展包下载网址提供两个 pecl.php.net
windows.php.net/downloads/pecl/releases/
2. 查看版本 PHP版本 系统平台版本32位/64位
PHP Extension Build 在phpinfo()中查找
比如我的电脑安装的是wamp, 在phpinfo()页面查找到 API20121212,TS,VC11 PHP版本5.5.12
在windows.php.net网站上找到 php_redis-2.2.7-5.5-ts-vc11-x64.zip 文件进行下载
3. 找到相应版本进行压缩包下载,解压后将php_redis.dll文件拷贝到指定目录
C:\wamp\bin\php\php5.5.12\ext
4. 在php.ini配置文件中进行配置,加入如下语句
extension=php_redis.dll
5. 重启服务器
二、Redis服务启动
redis-server --help查看命令帮助文档
redis-server [configfile] 启动服务
配置文件configfile选用第一步创建的redis.conf文件路径
使用ps aux|grep redis来查看当前启动的所有服务,找到是否有redis-server服务。可以查看服务主机名和端口号。
三、Redis客户端连接
redis-cli --help查看命令帮助文档
redis-cli -h -p 连接到指定主机和指定端口
info 连上redis之后查看系统信息
四、Redis数据类型
string, list, set, hash, sort set
1. string
通过get,set命令进行设置和读取
数据结构key value
string数据类型可以是整数,浮点数和字符串
set string1 joyjoe get string1 set string2 4 get string2 incr string2 get string2 incrby string2 5 get string2 decr string2 4 get string2 decr string2 get string2
针对整数可以采取以下命令,分别表示递增,递增的幅度,递减,递减的幅度
incr key
incrby key increment
decr key
decrby key decrementd
2. list
针对队列可以采取push和pop操作分别往list中推入数据和从list中取出数据
lpush list1 "0001" lpush list1 20 lpush list1 "JoyJoe" llen list1 rpop list1 rpop list1 rpop list1 llen list1
push和pop操作都是有方向性的,分为lpush,rpush, lpop, rpop四个命令
llen是用来查看list元素个数的命令
3. set
set是一个无重复数据的集合
sadd key value 给集合添加值
srem key value 从集合中删除值
scard key 查看集合个数
sismember key value 判断给定值是否在集合中 如果包含返回1,否则返回0
由于整数,浮点数,字符串都是string类型,所以在set中,20和'20'是相同数据
4. hash
hset hash1 name 'joyjoe' hset hash1 age 20 hset hash1 sex 'male' hset hash1 age 25 hget hash1 age hmget hash1 name sex age
hlen hash1
hash数据结构的key是string类型
hmget用于一次读取多个key的值
5. sort set
一个具有排名属性的集合,集合元素也是不能重复。具有相同排名分数的元素排列顺序按照字典序排列
zadd zset1 [score] [value] 给某个排名集合中添加一个元素
zrem zset1 [score]
zcard zset1 查看集合中数据的个数
zrange zset1 [start] [stop] [withscores] 显示集合中从start到stop之间的元素和排名,包含start和stop元素
zrank zset1 [value] 查看某个元素在集合中的排名
清空当前数据库中的所有数据
flushdb
五、PHP安装Redis扩展模块
由于本人MAC电脑上使用的是XAMPP集成环境,所以安装过程如下
1. 在pecl.php.net官方网站上下载压缩包
2. 解压并进入目录,执行
sudo /Applications/XAMPP/xamppfiles/bin/phpize
3. 直接执行./configure 命令
./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config
4. 执行 sudo make && sudo make install
安装完成之后,redis.so文件在目录 /Application/XAMPP/xamppfiles/lib/php/extensions/no-debug-non-zts-20131226/
5. 在xampp的php.ini文件中加入
extension=redis.so
6. 重新启动xampp
六、PHP操作Redis的文档
文档地址 github.com/phpredis/phpredis
接下来直接上代码
<?php $redis = new \Redis(); //Redis类的命名空间是根 $connect = $redis->connect("127.0.0.1", 6379); var_dump($connect); ?>
1. 操作string
<?php $redis = new \Redis(); $redis->connect("127.0.0.1", 6379); $redis->delete("string1"); $redis->set("string1", "joyjoe"); var_dump($redis->get("string1")); $redis->set("string1", 5); $redis->incr("string1", 5); var_dump($redis->get("string1")); ?>
在PHPredis中,incr, incrby表示同一个命令,等价于redis.io中的incrby
2. 操作list
<?php $redis = new \Redis(); $redis->connect("127.0.0.1", 6379); $redis->delete("list1"); $redis->lPush("list1", 12); $redis->lPush("list2", 13); $redis->lPush("list2", 14); $redis->lPushx("list3", 15); $redis->lPush("list2", 15); $redis->rPop("list2"); $redis->lLen("list2"); ?>
lPushx操作表示当key存在时才进行推入值
3. 操作set
<?php $redis = new \Redis(); $redis->connect("127.0.0.1", 6379); $redis->delete("set1"); $redis->sAdd("set1", 13); $redis->sAdd("set1","13"); $redis->sAdd("set1", 14); var_dump($redis->sCard("set1")); var_dump($redis->sMembers("set1")); ?>
4. 操作hash
<?php $redis=new \Redis(); $redis->connect("127.0.0.1", 6379); $redis->delete("hash1"); $redis->hSet("hash1", "name", 'joyjoe'); $redis->hMSet("hash1", array('age' => '30', 'sex' => 'male')); $redis->hIncrBy("hash1", "age", "-10"); var_dump($redis->hExists("hash1", "price")); //false var_dump($redis->hLen("hash1")); //int(3) var_dump($redis->hKeys("hash1")); // array("name","age","sex") var_dump($redis->hVals("hash1")); // array("joyjoe","20","male") var_dump($redis->hGetAll("hash1")); // array("name"=>"joyjoe","age"=>"20","sex"=>"male") var_dump($redis->hGet("hash1", "name")); // "joyjoe" var_dump($redis->hMGet("hash1", array("sex", "age", "price"))); // array("sex"=>"male", "age"=>"20", "price" => false) ?>
5. 操作sort set
<?php $redis = new \Redis(); $redis->connect("127.0.0.1", 6379); $redis->delete("zset1"); $redis->zAdd("zset1", 1, "joyjoe"); $redis->zAdd("zset1", 2, "bob"); $redis->zAdd("zset1", 2.3, "mike"); $redis->zAdd("zset1", 3.1, "mark"); $redis->zAdd("zset1", 3.2, "lucy"); var_dump($redis->zCard("zset1")); //int(5) var_dump($redis->zCount("zset1", 2, 3)); //int(2) var_dump($redis->zIncrBy("zset1", 2.5, 'zize')); //float(2.5) var_dump($redis->zIncrBy("zset1", -0.1, 'lucy')); //float(3) var_dump($redis->zCard("zset1")); //int(6) var_dump($redis->zCount("zset1", 2, 3)); //int(4) var_dump($redis->zScore("zset1", "lucy")); //float(3) var_dump($redis->zScore("zset1", "zize")); //float(2.5) var_dump($redis->zRange("zset1", 0, -1)); var_dump($redis->zRange("zset1", 0, -1, true)); var_dump($redis->zRevRange("zset1", 0, -1, true)); var_dump($redis->zRange("zset1", -3, -2, true)); // array("zize"=>2.5, "lucy"=>3) var_dump($redis->zRange("zset1", 2, -4, true)); // array("mike"=>2.3) var_dump($redis->zRange("zset1", 3, -4, true)); // array(0) var_dump($redis->zRangeByScore("zset1", 1, 3)); // return data which score in range var_dump($redis->zRangeByScore("zset1", 1, 3, array("withscores"=>true))); var_dump($redis->zRevRangeByScore("zset1", 3, 1, array("withscores"=>true))); var_dump($redis->zRangeByScore("zset1", 1, 3, array("withscores"=>true, 'limit'=>array(1,2)))); ?>