redis可视化工具:http://www.treesoft.cn/dms.html

#php redis使用 常用方法

https://www.cnblogs.com/mg007/p/10431079.html

基本:

$redis = new Redis();//创建对象
$redis->connect('127.0.0.1',6379);//建立连接
$redis->delete('test');//删除
$redis->exists('test');//判断是否存在
$rs = redis->getMultiple(array('name','name1','name2'));//读取多个值并返回 数组 字符串: $redis->set('test','123');//写
$redis->setnx('test','123');//不存在时写
$rs = redis->get('test');//读 rs 123
$redis->incr('test');//加1 test 123=>124
$redis->decr('test');//减1 test 124=>123 列表: $redis->lpush('test','111');//在列表首添加一个元素
$redis->rpush('test','222');//在列表尾添加一个元素
$redis->lpop('test');//删除列表第一个元素
$redis->rpop('test');//删除列表最后一个元素
$redis->lsize('test');//统计列表元素数量
$redis->llen('test');//统计列表元素数量
$redis->lset('test',1,'111');//设置列表数据 1索引 111设置的值 索引不存在返回false
$redis->lget('test',2);//读取列表数据 2索引
$redis->lrange('test',0,20);//读取列表数据 0开始索引 20读取数量
$redis->lgetrange('test',0,20);//读取列表数据 0开始索引 20读取数量
$redis->lremove('test','a',2);//删除值为a的列表元素 2个数 即从头部开始删除2个为a的元素 集合: $redis->sadd('test','111');//添加一个元素
$redis->smembers('test');//读取集合
$redis->sgetmembers('test');//读取集合
$redis->sort('test');//读取集合
$redis->sremove('test','111');//删除集合中指定元素
$redis->smove('a','b','111');//将a集合值111的元素移动到b集合中去
$redis->scontains('test', '111');//判断集合中是否存在指定值
$redis->ssize('test');//获取集合元素数量
$redis->spop('test');//随机移除一个元素并返回
$redis->sinter("test","test1");//获取集合交集
$redis->sinterstore('new',"test","test1");//获取集合交集并创建给新集合new
$redis->sunion("test","test1");//获取集合并集
$redis->sinterstore('new',"test","test1");//获取集合并集并创建给新集合new
$redis->sdiff("test","test1");//获取集合差集
$redis->sdiffstore('new',"test","test1");//获取集合差集并创建给新集合new

https://www.cnblogs.com/wt645631686/p/8336499.html

Key相关操作

TYPE

 类型检测,字符串返回string,列表返回 list,set表返回set/zset,hash表返回hash,key不存在返回0

复制代码
<?php
echo $redis->type('not_exists_key'); //none /int(0) $redis->set('str_key',"str_val"); //构建一个字符串
echo $redis->type('str_key'); //string / int(1) $redis->sadd('s_key',"s_val1"); //构建一个集合
echo $redis->TYPE('s_key'); //set /int(2) $redis->lpush('list_key',"list_val1"); //构建一个列表
echo $redis->type('list_key'); //list / int(3) $redis->zadd('z_key',1,'z_val1'); //构建一个zset (sorted set) // int(1)
$redis->zadd('z_key',2,'z_val2');
$redis->zadd('z_key',3,'z_val3');
echo $redis->zrange('z_key',0,-1); // array(3) { [0]=> string(3) "z_val1" [1]=> string(3) "z_val2" [2]=> string(3) "z_val3" }
echo $redis->type('z_key');     //zset / int(4) $redis->hset('website','baidu','www.baidu.com'); //一个新域
echo $redis->hget('website','baidu');         //string(8) "www.baidu.com"
echo $redis->type('website');             //hash /int(5)
复制代码
DEL 移除给定的一个或多个key,如果key不存在,则忽略该命令。 复制代码
<?php
//①删除单个key
$redis->set('key','val');
$redis->del('key'); //返回 TRUE(1)
var_dump($redis->get('key')); //返回 bool(false) //②删除一个不存在的key
if(!$redis->exists('no_exists_key')) //不存在
var_dump($redis->del('no_exists_key')); //返回 int(0) //③同时删除多个key
$array_mset=['key1'=>'val1','key2'=>'val2','key3'=>'val3'];
$redis->mset($array_mset); //用MSET一次储存多个值
$array_mget=array('key1','key2','key3');
var_dump($redis->mget($array_mget)); //一次返回多个值 //array(3) { [0]=> string(4) "val1" [1]=> string(4) "val2" [2]=> string(4) "val3" } $redis->del($array_mget); //同时删除多个key
var_dump($redis->mget($array_mget)); //返回 array(3) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(false) }
复制代码
RANDOMKEY 从当前数据库中随机返回(不删除)一个key。当数据库不为空时,返回一个key,当数据库为空时,返回nil。 复制代码
<?php
//①数据库不为空
echo $redis->randomkey(); //返回随机key
//②数据库为空
var_dump($redis-> randomkey()); //bool(false)
复制代码
EXPIRE 为给定key设置生存时间,当key过期时,它会被自动删除。 <?php
$redis->expire('key', 30); //设置有效期为30秒;第二参数不传递,则取消expire行为
EXPIREAT EXPIREAT的作用和EXPIRE一样,都用于为key设置生存时间。不同在于EXPIREAT命令接受的时间参数是UNIX时间戳。 <?php
$redis->set('key','val');
echo $redis->expireat('key',strtotime('2018-01-23 18:00')); //设定过期时间为2018-01-23 18:00
echo $redis->ttl('key'); //倒计时剩余秒数
TTL 返回给定key的剩余生存时间,单位秒。当 key 不存在时,返回 -2,当 key 存在但没有设置剩余生存时间时,返回 -1 。 复制代码
<?php
//①设置过期时间的key
$redis->set('key','val');
$redis->expire('key',30); //设置生存时间为30秒 //return (integer) 1
echo $redis->get('key'); //return val
echo $redis->ttl('key'); //(integer) 25 ,不断输出,会不断缩减过期时间 echo $redis->ttl('key'); //30秒过去,name过期 //(integer) -2
var_dump($redis->get('key')); //过期的key将被删除 //return bool(false); //②没有设置过期时间的key
$redis->set('key','val');
var_dump($redis->ttl('key')); //int(-1) //③不存在的key
$redis->exists('not_exists_key');//int(0)
var_dump($redis->ttl('not_exists_key'));//int(-2)
复制代码
EXISTS 检查给定key是否存在,若key存在,返回1,否则返回0。 <?php
var_dump($redis->exists('key')); //key存在 返回bool(true) ,否则false
RENAME 对key进行改名,当key和newkey相同或者key不存在时,返回一个错误;当newkey已经存在时,RENAME命令将覆盖旧值。 复制代码
<?php
//①key存在且newkey不存在
$redis->set('key',"val");
var_dump($redis->rename('key','new_key')); //bool(true)
var_dump($redis->exists('key')); //key不复存在 //bool(false)
var_dump($redis->exists('new_key')); //new_key取而代之 //bool(true) //②当key不存在时,返回错误 ,返回false;
var_dump($redis->rename('not_exists_key','new_key')); //bool(false) //③new_key已存在时,RENAME会覆盖旧new_key
$redis->set('key',"val");
$redis->set('key2',"val2");
var_dump($redis->rename('key','key2')); //bool(true)
var_dump($redis->get('key')); //(nil) bool(false)
var_dump($redis->get('key2')); //string(6) "val"
复制代码
RENAMENX 当且仅当new_key不存在时,将key改为new_key。出错的情况和RENAME一样(key不存在时报错)。修改成功时,返回1。如果newkey已经存在,返回0。 复制代码
<?php
//① new_key不存在,成功
$redis->set('key',"val");
$redis->exists('new_key'); //int(0)
var_dump($redis->renamenx('key','new_key')); // bool(true) //②new_key存在时,失败
$redis->set('key1',"val1");
$redis->set('key2',"val2");
var_dump($redis->renamenx('key1', 'key2'));// bool(false)
复制代码
SORT 参数:
array(
'by' => 'pattern', //匹配模式
'limit' => array(0, 1),
'get' => 'pattern'
'sort' => 'asc' or 'desc',
'alpha' => TRUE,
'store' => 'external-key'
) 返回或保存给定列表、集合、有序集合key中经过排序的元素。 ①一般排序 复制代码
<?php
$redis->lpush('test', 1);
$redis->lpush('test', 10);
$redis->lpush('test', 8);
print_r($redis->sort('test')); //结果:Array ( [0] => 1 [1] => 8 [2] => 10 )
复制代码
②字母排序 复制代码
<?php
$redis->lpush('website', "www.reddit.com");
$redis->lpush('website', "www.slashdot.com");
$redis->lpush('website', "www.infoq.com");
//默认排序
var_dump($redis->SORT('website'));//array(3) { [0]=> string(13) "www.infoq.com" [1]=> string(16) "www.slashdot.com" [2]=> string(14) "www.reddit.com" } //按字符排序 ALPHA=true
var_dump($redis->SORT('website', array('ALPHA'=>TRUE))); //array(3) { [0]=> string(13) "www.infoq.com" [1]=> string(14) "www.reddit.com" [2]=> string(16) "www.slashdot.com" }
复制代码
③排序取部分数据 复制代码
<?php
$redis->lpush('test', 1);
$redis->lpush('test', 10);
$redis->lpush('test', 8);
print_r($redis->sort('test')); //结果:Array ( [0] => 1 [1] => 8 [2] => 10 )
复制代码
④使用外部key进行排序
有时候你会希望使用外部的key作为权重来比较元素,代替默认的对比方法。 假设现在有用户(user)数据如下: 复制代码
id    name     level
-------------------------------
1    admin    9999
2    huangz    10
59230  jack     3
222    hacker    9999
复制代码
id数据保存在key名为user_id的列表中。
name数据保存在key名为user_name_{id}的列表中
level数据保存在user_level_{id}的key中。 复制代码
<?php
//先将要使用的数据加入到数据库中 //admin
$redis->LPUSH('user_id', 1);//(integer) 1
$redis->SET('user_name_1', 'admin');
$redis->SET('user_level_1',9999); //huangz
$redis->LPUSH('user_id', 2);//(integer) 2
$redis->SET('user_name_2', 'huangz');
$redis->SET('user_level_2', 10); // jack
$redis->LPUSH('user_id', 59230);//(integer) 3
$redis->SET('user_name_59230','jack');
$redis->SET('user_level_59230', 3); //hacker
$redis->LPUSH('user_id', 222); //(integer) 4
$redis->SET('user_name_222', 'hacker');
$redis->SET('user_level_222', 9999);
复制代码
如果希望按level从大到小排序user_id,可以使用以下命令 复制代码
<?php
$redis_sort_option=array('BY'=>'user_level_*',
'SORT'=>'DESC'
);
var_dump($redis->SORT('user_id',$redis_sort_option)); //array(4) { [0]=> string(3) "222" [1]=> string(1) "1" [2]=> string(1) "2" [3]=> string(5) "59230" } //---------------------------
//1) "222" # hacker
//2) "1" # admin
//3) "2" # huangz
//4) "59230" # jack
复制代码
但是有时候只是返回相应的id没有什么用,你可能更希望排序后返回id对应的用户名,这样更友好一点,使用GET选项可以做到这一点 复制代码
<?php
$redis_sort_option=array('BY'=>'user_level_*',
'SORT'=>'DESC',
'GET'=>'user_name_*'
);
var_dump($redis->SORT('user_id', $redis_sort_option)); //array(4) { [0]=> string(6) "hacker" [1]=> string(5) "admin" [2]=> string(6) "huangz" [3]=> string(4) "jack" }
//---------------------------
//1) "hacker"
//2) "admin"
//3) "huangz"
//4) "jack"
复制代码
可以多次地、有序地使用GET操作来获取更多外部key。
比如你不但希望获取用户名,还希望连用户的密码也一并列出,可以使用以下命令: 复制代码
<?php
// 先添加一些测试数据
$redis->SET('user_password_222', "hey,im in");
$redis->SET('user_password_1', "a_long_long_password");
$redis->SET('user_password_2', "nobodyknows");
$redis->SET('user_password_59230', "jack201022"); // 获取name和password
$redis_sort_option=array('BY'=>'user_level_*',
'SORT'=>'DESC',
'GET'=>array('user_name_*','user_password_*')
);
var_dump($redis->SORT('user_id',$redis_sort_option));//array(8) { [0]=> string(6) "hacker" [1]=> string(9) "hey,im in" [2]=> string(5) "admin" [3]=> string(20) "a_long_long_password" [4]=> string(6)
"huangz" [5]=> string(11) "nobodyknows" [6]=> string(4) "jack" [7]=> string(10) "jack201022" } //------------------------------------
//1) "hacker" // 用户名
//2) "hey,im in" // 密码
//3) "jack"
//4) "jack201022"
//5) "huangz"
//6) "nobodyknows"
//7) "admin"
//8) "a_long_long_password"
复制代码
注意GET操作是有序的,GET user_name_* GET user_password_* 和 GET user_password_* GET user_name_*返回的结果位置不同 复制代码
<?php
//获取name和password 注意GET操作是有序的
$redis_sort_option=array('BY'=>'user_level_*',
'SORT'=>'DESC',
'GET'=>array('user_password_*','user_name_*')
);
var_dump($redis->SORT('user_id',$redis_sort_option));// array(8) { [0]=> string(9) "hey,im in" [1]=> string(6) "hacker" [2]=> string(20) "a_long_long_password" [3]=> string(5) "admin" [4]=> string(11) "nobodyknows"
[5]=> string(6) "huangz" [6]=> string(10) "jack201022" [7]=> string(4) "jack" }
复制代码
GET还有一个特殊的规则——"GET #",用于获取被排序对象(我们这里的例子是user_id)的当前元素。
比如你希望user_id按level排序,还要列出id、name和password,可以使用以下命令: 复制代码
<?php
$redis_sort_option=array('BY'=>'user_level_*',
'SORT'=>'DESC',
'GET'=>array('//','user_password_*','user_name_*')
);
var_dump($redis->SORT('user_id',$redis_sort_option));//array(12) { [0]=> string(3) "222" [1]=> string(9) "hey,im in" [2]=> string(6) "hacker" [3]=> string(1) "1" [4]=> string(20) "a_long_long_password"
[5]=> string(5) "admin" [6]=> string(1) "2" [7]=> string(11) "nobodyknows" [8]=> string(6) "huangz" [9]=> string(5) "59230" [10]=> string(10) "jack201022" [11]=> string(4) "jack" } //--------------------------------------------------------------
//1) "222" // id
//2) "hacker" // name
//3) "hey,im in" // password
//4) "1"
//5) "admin"
//6) "a_long_long_password"
//7) "2"
//8) "huangz"
//9) "nobodyknows"
//10) "59230"
//11) "jack"
//12) "jack201022"
复制代码
只获取对象而不排序
BY修饰符可以将一个不存在的key当作权重,让SORT跳过排序操作。
该方法用于你希望获取外部对象而又不希望引起排序开销时使用。 复制代码
<?php
// 确保fake_key不存在
$redis->EXISTS('fake_key');//(integer) 0 // 以fake_key作BY参数,不排序,只GET name 和 GET password
$redis_sort_option=array('BY'=>'fake_key',
'SORT'=>'DESC',
'GET'=>array('//','user_name_*','user_password_*')
);
var_dump($redis->SORT('user_id',$redis_sort_option));//array(12) { [0]=> string(3) "222" [1]=> string(6) "hacker" [2]=> string(9) "hey,im in" [3]=> string(5) "59230" [4]=> string(4) "jack" [5]=> string(10)
"jack201022" [6]=> string(1) "2" [7]=> string(6) "huangz" [8]=> string(11) "nobodyknows" [9]=> string(1) "1" [10]=> string(5) "admin" [11]=> string(20) "a_long_long_password" } //----------------------------------------------
//1) "222" // id
//2) "hacker" // user_name
//3) "hey,im in" // password
//4) "59230"
//5) "jack"
//6) "jack201022"
//7) "2"
//8) "huangz"
//9) "nobodyknows"
//10) "1"
//11) "admin"
//12) "a_long_long_password"
复制代码
保存排序结果 默认情况下,SORT操作只是简单地返回排序结果,如果你希望保存排序结果,可以给STORE选项指定一个key作为参数,排序结果将以列表的形式被保存到这个key上。(若指定key已存在,则覆盖。) 复制代码
<?php
$redis->EXISTS('user_info_sorted_by_level'); // 确保指定key不存在 //(integer) 0
$redis_sort_option=array('BY'=>'user_level_*',
'GET'=>array('//','user_name_*','user_password_*'),
'STORE'=>'user_info_sorted_by_level'
); var_dump($redis->SORT('user_id',$redis_sort_option)); //int(12)
var_dump($redis->LRANGE('user_info_sorted_by_level', 0 ,11)); // 查看排序结果 //array(12) { [0]=> string(5) "59230" [1]=> string(4) "jack" [2]=> string(10) "jack201022" [3]=> string(1) "2" [4]=> string(6)
"huangz" [5]=> string(11) "nobodyknows" [6]=> string(3) "222" [7]=> string(6) "hacker" [8]=> string(9) "hey,im in" [9]=> string(1) "1" [10]=> string(5) "admin" [11]=> string(20) "a_long_long_password" } //-----------------------------------------------------------------
//1) "59230"
//2) "jack"
//3) "jack201022"
//4) "2"
//5) "huangz"
//6) "nobodyknows"
//7) "222"
//8) "hacker"
//9) "hey,im in"
//10) "1"
//11) "admin"
//12) "a_long_long_password"
复制代码
一个有趣的用法是将SORT结果保存,用EXPIRE为结果集设置生存时间,这样结果集就成了SORT操作的一个缓存。
这样就不必频繁地调用SORT操作了,只有当结果集过期时,才需要再调用一次SORT操作。
有时候为了正确实现这一用法,你可能需要加锁以避免多个客户端同时进行缓存重建(也就是多个客户端,同一时间进行SORT操作,并保存为结果集),具体参见SETNX命令。
在GET和BY中使用哈希表
可以使用哈希表特有的语法,在SORT命令中进行GET和BY操作。 复制代码
<?php
// 假设现在我们的用户表新增了一个serial项来为作为每个用户的序列号
// 序列号以哈希表的形式保存在serial哈希域内。 $redis_hash_testdata_array=array(1=>'23131283',
2=>'23810573',
222=>'502342349',
59230=>'2435829758'
); $redis->HMSET('serial',$redis_hash_testdata_array); // 我们希望以比较serial中的大小来作为排序user_id的方式
$redis_sort_option=array('BY'=>'*->serial');
var_dump($redis->SORT('user_id', $redis_sort_option)); //array(4) { [0]=> string(3) "222" [1]=> string(5) "59230" [2]=> string(1) "2" [3]=> string(1) "1" } //----------------------------------------
//1) "222"
//2) "59230"
//3) "2"
//4) "1"
复制代码
符号"->"用于分割哈希表的关键字(key name)和索引域(hash field),格式为"key->field"。
除此之外,哈希表的BY和GET操作和上面介绍的其他数据结构(列表、集合、有序集合)没有什么不同。 SET 将字符串值value关联到key。如果key已经持有其他值,SET就覆写旧值,无视类型,总是返回OK(TRUE),因为SET不可能失败。 复制代码
<?php
//①对字符串类型的key进行SET
$redis->SET('key', 'val');//bool(true) //②对非字符串类型的key进行SET
$redis->LPUSH('key_obj', "val1"); //建立一个列表 #(integer) 1 //int(1)
$redis->TYPE('key_obj');//list //int(3) $redis->SET('key', "val_obj"); //覆盖列表类型 #OK //bool(true)
$redis->TYPE('key');//string //int(1)
复制代码
SETNX 将key的值设为value,当且仅当key不存在。若给定的key已经存在,则SETNX不做任何动作。设置成功,返回1。设置失败,返回0。 复制代码
<?php
$redis->exists('key'); // key不存在 //bool(false);
$redis->setnx('key', "val"); // key设置成功 //bool(true)
$redis->setnx('key', "val1"); // key设置失败 //bool(false)
echo $redis->get('key'); // 没有被覆盖 //"val"
复制代码
SETEX 将值value关联到key,并将key的生存时间设为seconds(以秒为单位)。如果key已经存在,SETEX命令将覆写旧值。设置成功时返回OK. 复制代码
<?php
$redis->setex('key', 10, 'val'); //表示存储有效期为10秒
举例:
//①key不存在
$redis->setex('key', 60,val);//bool(true)
echo $redis->get('key'); //值 //"val"
sleep(4);
echo $redis->ttl('key'); //剩余生存时间 //int(56) //②key已经存在,key被覆写
$redis->set('key', "val1"); //bool(true);
$redis->setex('key', 3000,"val2"); //bool(true);
echo $redis->get('key'); //"val2"
复制代码
SETRANGE 用value参数覆写给定key所储存的字符串值,从偏移量offset开始。不存在的key当作空白字符串处理。
SETRANGE命令会确保字符串足够长以便将value设置在指定的偏移量上,如果给定key原来储存的字符串长度比偏移量小(比如字符串只有5个字符长,但你设置的offset是10),那么原字符和偏移量之间的空白将用零比特(zerobytes,"\x00")来填充。 警告 当生成一个很长的字符串时,Redis需要分配内存空间,该操作有时候可能会造成服务器阻塞(block)。在2010年的Macbook Pro上,设置偏移量为536870911(512MB内存分配),耗费约300毫秒, 设置偏移量为134217728(128MB内存分配),耗费约80毫秒,设置偏移量33554432(32MB内存分配),耗费约30毫秒,设置偏移量为8388608(8MB内存分配),耗费约8毫秒。 注意若首次内存分配成功之后,再对同一个key调用SETRANGE操作,无须再重新内存。 复制代码
<?php
//①对非空字符串进行SETRANGE
$redis->SET('key', "hello world");
$redis->SETRANGE('key', 6, "Redis"); //int(11)
$redis->GET('key');//"hello Redis" //②对空字符串/不存在的key进行SETRANGE
$redis->EXISTS('empty_string');//bool(false)
$redis->SETRANGE('empty_string', 5 ,"Redis!"); //对不存在的key使用SETRANGE //int(11)
var_dump($redis->GET('empty_string')); //空白处被"\x00"填充 #"\x00\x00\x00\x00\x00Redis!" //return string(11) "Redis!"
复制代码
MSET 同时设置一个或多个key-value对。当发现同名的key存在时,MSET会用新值覆盖旧值,如果你不希望覆盖同名key,请使用MSETNX命令。总是返回OK(因为MSET不可能失败) 复制代码
<?php
$array_mset=['key1'=>'val1', 'key2'=>'val2'];
$redis->MSET($array_mset); //bool(true) // MSET覆盖旧值的例子 但是经过测试覆盖不了
var_dump($redis->SET('google', "google.cn")); //bool(true)
var_dump($redis->MSET('google',"google.hk")); //bool(false)
echo $redis->GET('google'); //google.cn 与redis手册的示例结果不符
复制代码
MSETNX 同时设置一个或多个key-value对,当且仅当key不存在。即使只有一个key已存在,MSETNX也会拒绝所有传入key的设置操作(原子性),当所有key都成功设置,返回1。如果所有key都设置失败(最少有一个key已经存在),那么返回0。 复制代码
<?php
//①对不存在的key进行MSETNX
$array_mset=array('rmdbs'=>'MySQL',
'nosql'=>'MongoDB',
'key-value-store'=>'redis'
);
$redis->MSETNX($array_mset);//bool(true) //②对已存在的key进行MSETNX
$array_mset=array('rmdbs'=>'Sqlite',
'language'=>'python'
);
var_dump($redis->MSETNX($array_mset)); // rmdbs键已经存在,操作失败 //bool(false)
var_dump($redis->EXISTS('language')); // 因为操作是原子性的,language没有被设置 bool(false) echo $redis->GET('rmdbs'); // rmdbs没有被修改 //"MySQL" $array_mset_keys=array( 'rmdbs', 'nosql', 'key-value-store');
print_r($redis->MGET($array_mset_keys)); //Array ( [0] => MySQL [1] => MongoDB [2] => redis )
复制代码
APPEND 连接到或者设定字符串。如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值之后。如果key不存在,APPEND就简单地将给定key设为value,就像执行SET key value一样。 复制代码
<?php
//①对不存在的key执行APPEND
$redis->exists('key'); // 确保key不存在 //bool(false)
$redis->append('key',"val"); // 对不存在的key进行APPEND,等同于SET key "val" //int(3) // 字符长度 //②对字符串进行APPEND
$redis->append('key', " append_val ");
echo $redis->get('key'); // 查看整个字符串 //"val append_val" //strlen 获取字符串长度,当 key不存在时,返回0。
$redis->set('key', "value");
echo $redis->strlen('key'); //int(5)
echo $redis->strlen('not_exists_key'); // 不存在的key长度视为0 //int(0)
复制代码
GET 返回key所关联的字符串值。如果key不存在,返回nil。 <?php
var_dump($redis->GET('not_exists_key')); //return bool(false)
$redis->SET('exists_key', "val"); //return bool(true)
var_dump($redis->GET('exists_key')); //return string(7) "val"
MGET
返回所有(一个或多个)给定key的值。如果某个指定key不存在,那么返回特殊值nil。因此,该命令永不失败。一个包含所有给定key的值的列表。 <?php
$redis_mget_key_array=array('exists_key','not_exists_key');
var_dump($redis->MGET($redis_mget_key_array)); //当MGET中有不存在key的情况 //array(2) { [0]=> string(3) "val" [1]=> bool(false) }
GETRANGE
返回key中字符串值的子字符串,字符串的截取范围由start和end两个偏移量决定(包括start和end在内)。负数偏移量表示从字符串最后开始计数,-1表示最后一个字符,-2表示倒数第二个,以此类推。 复制代码
<?php
$redis->SET('key', "hello, my friend");
echo $redis->GETRANGE('key', 0, 4); //返回索引0-4的字符,包括4。 //"hello"
echo $redis->GETRANGE('key', -1 ,-5); //不支持回绕操作 //""
echo $redis->GETRANGE('key', -3 ,-1); //负数索引 //"end"
echo $redis->GETRANGE('key', 0, -1); //从第一个到最后一个 //"hello, my friend"
echo $redis->GETRANGE('key', 0, 1008611); //值域范围不超过实际字符串,超过部分自动被符略 //"hello, my friend"
复制代码
GETSET 将给定key的值设为value,并返回key的旧值。当key没有旧值时,返回nil。 <?php
var_dump($redis->EXISTS('key'));//return bool(false);
var_dump($redis->GETSET('key','old_val')); //因为key之前不存在,没有旧值,返回nil //bool(false)
var_dump($redis->GETSET('key','new_val')); //key被更新,旧值被返回 //string(7) "old_val"
STRLEN
返回key所储存的字符串值的长度。当key储存的不是字符串值时,返回一个错误。字符串值的长度,当 key不存在时,返回0。 <?php
$redis->SET('key', "Hello world");
echo $redis->STRLEN('key'); //int(11)
echo $redis->STRLEN('not_exists_key'); //不存在的key长度视为int(0)
INCR
将key中储存的数字值增一。如果key不存在,以0为key的初始值,然后执行INCR操作。 <?php
$redis->SET('page_view', 20);
var_dump($redis->INCR('page_view')); //int(21)
var_dump($redis->GET('page_view')); // 数字值在Redis中以字符串的形式保存 //string(2) "21
INCRBY
将key所储存的值加上增量increment。如果key不存在,以0为key的初始值,然后执行INCRBY命令。 复制代码
<?php
//①key存在且是数字值
$redis->SET('num', 50); //设置num为50
$redis->INCRBY('num', 20); //给num加上20
var_dump($redis->GET('num')); //string(2) "70" //②key不存在
$redis->INCRBY('not_exists_key',20); //20
var_dump($redis->GET('not_exists_key')); //string(20) //③key不是数字值
$redis->SET('book', "long long ago...");
var_dump($redis->INCRBY('book', 200)); // bool(false)
复制代码
DECR 将key中储存的数字值减一。如果key不存在,以0为key的初始值,然后执行DECR操作。 复制代码
<?php
//①对存在的数字值key进行DECR
$redis->SET('num', 10);
$redis->DECR('num'); //int(9)
echo $redis->GET('num'); //string(1) "9" //②对不存在的key值进行DECR
$redis->DECR('not_exists_key'); //int(-1)
echo $redis->GET('not_exists_key'); //string(2) "-1"
复制代码
DECRBY
将key所储存的值减去减量decrement。如果key不存在,以0为key的初始值,然后执行DECRBY操作。 复制代码
<?php
//①对存在的数值key进行DECRBY
$redis->SET('num', 100);
var_dump($redis->DECRBY('num', 20)); //int(80)
var_dump($redis->GET('num')); //string(2) "80" //②对不存在的key进行DECRBY
var_dump($redis->DECRBY('not_exists', 10)); //int(-10)
var_dump($redis->GET('not_exists')); //string(3) "-10"

测试例子:

<?php

$redis = new Redis();//创建对象
$redis->connect('127.0.0.1',6379);//建立连接
// $redis->lpush('test','333');//在列表首添加一个元素
// $redis->rpush('test','444');//在列表尾添加一个元素
$arr = array(
'name' => 'cui',
'sex' => 'man',
'age' => 35,
'address' => '山东省'
);
$rs = $redis->lset('test',6,'aaa');
// $rs = $redis->lget('test',1);
// $rs = $redis->lrange('test',0,10);
// $rs = $redis->lremove('test','444',3);
// $rs = $redis->hset('hash1','sex','man');
// $redis->hset('website','baidu','www.baidu.com');
// $redis->hset('website',8001,json_encode($arr));

#Windows环境下安装Redis

https://www.cnblogs.com/skmobi/p/11696620.html

一.Redis临时服务

1.打开cmd,进入到刚才解压到的目录,启动临时服务:redis-server.exe redis.windows.conf  (备注:通过这个命令,会创建Redis临时服务,不会在window Service列表出现Redis服务名称和状态,此窗口关闭,服务会自动关闭。)

2.打开另一个cmd窗口,客户端调用:redis-cli.exe -h 127.0.0.1 -p 6379

二.Redis自定义windows服务安装

1.进入Redis安装包目录,安装服务:redis-server.exe --service-install redis.windows.conf --service-name redisserver1 --loglevel verbose

win+r -> services.msc,可以看到服务安装成功

安装服务:redis-server.exe --service-install redis.windows.conf --service-name redisserver1 --loglevel verbose

启动服务:redis-server.exe  --service-start --service-name redisserver1

停止服务:redis-server.exe  --service-stop --service-name redisserver1

卸载服务:redis-server.exe  --service-uninstall--service-name redisserver1

三. 主从服务器

将d盘下新建一个文件夹叫redis2,把redis文件夹的东西拷贝到redis2文件夹下,将redis-windows.conf配置文件中的ip 和端口号改一下,然后按照上面的步骤按照一个服务即可

使用redis桌面管理器(下载地址:https://redisdesktop.com/),看到两个redis库

设置密码把 #requirepass foobared 的#号去掉改为自己的密码即可

设置好保存后,若要使设置起作用,需要重启redis服务

端口号和ip同理

重启后需要输入密码

#Windows下php安装redis扩展(详解版)

https://www.cnblogs.com/emmmmmm/p/10005726.html

首先确定电脑已经安装好了redis并且能使用,没有安装的伙计:http://www.runoob.com/redis/redis-install.html
 1.使phpinfo()函数查看PHP的版本信息,决定扩展文件版本(版本一定要对上,一定)。

2.需要php_redis.dll文件
  php_redis-2.2.5-5.6-nts-vc11-x86.zip(一定要保证版本的正确性)
    (这里注意php版本、php是nts还是ts 、php是x64以及x86 *这些必须一致*)

php_redis.dll      下载地址:https://pecl.php.net/package/redis



3.下载完成后:
    双击打开php_redis-2.2.7-5.6-nts-vc11-x86.zip文件。其中的php_redis.dll是我们需要用到的

4.解压缩后,将php_redis.dll拷贝至php的ext目录下

5.修改php.ini在该文件中加入:

extension=php_redis.dll

6.重启Apache后,使用phpinfo查看扩展是否成功安装


注意: 如果没有:请重新检查版本以及文件放置位置

        redis扩展不需要安装 php_igbinary.dll,百度的文章有的会把这个也写进去,亲测没有php_igbinary.dll,redis也可以启动
       php_igbinary : 在序列化和反序列化的效率上高于其自带的
         如果需要下载地址:http://windows.php.net/downloads/pecl/releases/igbinary/1.2.1/
       同样根据版本下载:安装方法同上,下载压缩包把php_igbinary.dll文件拷贝到php的ext文件夹下,在php.ini中加上
extension=php_igbinary.dll,放在extension=php_redis.dll的前面

php redis使用 常用方法 | Windows环境下安装Redis | Windows下php安装redis扩展(详解版)的更多相关文章

  1. centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解

    centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解 操作系统:centos 7.2 x86_64 安装walle系统服务端 1.以下安装,均在宿主机( ...

  2. Mac OS X10.9安装的Python2.7升级Python3.4步骤详解

    Mac OS X10.9安装的Python2.7升级Python3.4步骤详解 Mac OS X10.9默认带了Python2.7,不过现在Python3.4.0出来了,如果想使用最新版本,赶紧升级下 ...

  3. (转)Linux下PS1、PS2、PS3、PS4使用详解

    Linux下PS1.PS2.PS3.PS4使用详解 原文:http://www.linuxidc.com/Linux/2016-10/136597.htm 1.PS1——默认提示符 如下所示,可以通过 ...

  4. 基于windows环境的Flask网站搭建(mysql + conda + redis)

    1下载mysql-installer-community-5.7.24.0.msi (https://dev.mysql.com/downloads/windows/installer/8.0.htm ...

  5. windows下安装redis3.2.100单机和集群详解

    下载redis 下载地址:https://github.com/MicrosoftArchive/redis/releases 我下载的是3.2.100版本的Redis-x64-3.2.100.zip ...

  6. 【码上开心】Windows环境mysql数据库使用(一) 安装Mysql数据库

    [下载MySql] https://dev.mysql.com/downloads/mysql/ 如下图,选择版本,本教程仅演示ZIP压缩包下载配置. 2.[解压到指定目录] 3.[配置环境变量] 4 ...

  7. python commands包不支持windows环境与如何在windows下使用的简易方法

    commands模块不支持windows环境,让我们来看看. >>> import commands >>> print commands.getoutput('d ...

  8. Git学习系列之Windows上安装Git之后的一些配置(图文详解)

    不多说,直接上干货! 前面博客 Git学习系列之Windows上安装Git详细步骤(图文详解) 第一次使用Git时,需要对Git进行一些配置,以方便使用Git. 不过,这种配置工作只需要进行一次便可, ...

  9. Android开发最强模拟器Genymotion的安装及使用教程。附注释图详解

    前沿   呵呵,笔者第一次在公开的博客网站写心得,想让自己的Android开发生涯留下点足迹,并且为自己做点笔记,如果该文章能帮到广大的Android小白朋友最好了(其实我也是一小白,(●'◡'●)) ...

  10. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

随机推荐

  1. Python ( 高级 第一部)

    目录 time 时间模块 Python的内置方法 数字模块 随机模块 序列化模块 pickle 序列化模块 json os 系统模块 os  shutil 模块 os,path 模块 文件压缩模块 z ...

  2. 原生javascript解锁恶心的CSDN强制关注才能阅读让文章自动展开(转部分内容)

    此时你可以打开chrome浏览器的开发者工具 快捷键F12, 然后切换到Console界面 然后复制上面的javascript代码 var article_content=document.getEl ...

  3. 使用 Fiddler Everywhere 进行抓包

    使用 Fiddler Everywhere 进行抓包 开启各项必备功能 在打开浏览器之前需要先开启LiveTraffic为Capturing 然后点击像芯片一样的东西叫Decode(蓝色为开启状态)这 ...

  4. scrapy 爬取酷狗热门歌手音乐

    目录 声明 Hello,酷狗! 创建一个Scrapy项目 spider模块 分析前端界面 注意 items模块 pipeline模块 处理音频文件自定义下载路径 自定义下载图片路径 异步存入到数据库 ...

  5. [UnityShader]unity中2D Sprite显示阴影和接受阴影

    首先是效果 要让2D显示阴影,首先假设知道Unity阴影来源(shader中的ShadowCaster) 最简单的方法是,首先从官网下载Sprite-Default.Shader,查看源码 然后复制粘 ...

  6. [Unity]射线的简单应用和对UGUI的检测

    最近做的小游戏,需要通过触屏来控制移动,主要做法就是在Update中检测Input.TouchCount,但是问题是会盖住UGUI的Button事件,第一时间想到射线检测 常用射线 Unity有射线类 ...

  7. iOS 常用第三方库及原理

    AFNetWorking SDWebImage MJRefresh Masonry YYModel IQKeyboardManger

  8. 安装 deepin linux 系统、linux 使用记录

    安装 deepin 深度linux系统 官网:https://www.deepin.org/zh/ 包含了下载ios镜像和安装教程: 最新版本:https://www.deepin.org/zh/do ...

  9. centos8 安装docker启动失败

    借鉴https://www.zqcnc.cn/post/71.html systemctl status docker● docker.service - Docker Application Con ...

  10. Centos操作系统在虚拟机VMware上的安装(二)

    a:hover { color: rgba(255, 102, 0, 1) } 1.下载centos操作系统,提供百度云盘链接:http://pan.baidu.com/s/1pLHOR03 2.打开 ...