php 操作redis 常见方法示例

# php操作redis常见方法

 

### 1、 redis 的连接 :

 

```

//实例化redis

$redis = new Redis();

//连接

$redis->connect('127.0.0.1', 6379);

 

 //选择redis数据库

 $redis->select(1);   // 库编号 ( 0 ~ 15 )

 

//检测是否连接成功

echo "Server is running: " . $redis->ping();

// 输出结果 Server is running: +PONG 

```

 

### 2、 redis 操作 Strng (字符串):

 

```

//set   设置一个字符串的值

描述:设置key和value的值

参数:Key Value

返回值:BOOL 成功返回:TRUE;失败返回:FALSE

$redis->set('cat', 111);

 

//get   //获取一个字符串的值

描述:获取有关指定键的值

参数:key

返回值:string或BOOL 如果键不存在,则返回 FALSE。否则,返回指定键对应的value值。

 

echo $redis->get('cat'); // 111

 

// 重复set

$redis->set('cat', 222);

echo $redis->get('cat');  // 222

 

// mset  批量多值设置

$redis->mset(['cat'=>222,'age'=>18,,'size'=>90]);

 

//getMultiple  /mget   批量多值获取

描述:取得所有指定键的值。如果一个或多个键不存在,该数组中该键的值为假

参数:其中包含键值的列表数组

返回值:返回包含所有键的值的数组

 

$redis->set('test1',"1");  

$redis->set('test2',"2");  

$result = $redis->getMultiple(array('test1','test2'));  //注意是数组

$redis->mget(array('test1','test2'));   //注意是数组

print_r($result);   //结果:Array ( [0] => 1 [1] => 2 ) 

 

//自增

描述:数字递增存储键值键.

参数:key value:将被添加到键的值

返回值:INT the new value

$redis->set('test',"123");  

var_dump($redis->incr("test"));  //结果:int(124)  

var_dump($redis->incr("test"));  //结果:int(125) 

var_dump($redis->incrby("test",10));  


 

//自减

描述:数字递减存储键值。

参数:key value:将被添加到键的值

返回值:INT the new value

var_dump($redis->decr("test"));  //结果:int(122)  

var_dump($redis->decr("test"));  //结果:int(121) 

var_dump($redis->decrby("test",5));  

 

//删除

描述:删除指定的键

参数:一个键,或不确定数目的参数,每一个关键的数组:key1 key2 key3 … keyN

返回值:删除的项数

$redis->del('test'); 


 

//设置缓存时间 expire

$redis->expire("test",60); //时间单位s 秒

 

//获取过期剩余时间 ttl

$redis->ttl("test"); //返回剩余时间,单位s秒 , 如果永久返回-1,已过期返回-2 , 

 

//存在

描述:验证指定的键是否存在

参数key

返回值:Bool 成功返回:TRUE;失败返回:FALSE

范例:

var_dump($redis->exists('test'));  //结果:bool(true) 

 

//setnx

描述:当$key不存在时设置才生效;如果存在则值仍然不变;

参数:key value

返回值:BOOL 成功返回: TRUE;  失败返回:FALSE

范例:

 

$redis->set('test',"1111111111111");  

$redis->setnx('test',"22222222");  

echo $redis->get('test');  //结果:1111111111111  

$redis->del('test');  

$redis->setnx('test',"22222222");  

echo $redis->get('test');  //结果:22222222 


 

//append  追加

$redis->set('test',"abc");

$redis->append('test',"123");   // abc123


 

```

 

#### 练习:

 

```

$key = 'user';

$redis->del($key); 

$redis ->set($key,'11');

$redis ->setNx($key,3);//当$key不存在时设置才生效;如果存在则值仍然不变;

$redis ->decr($key);//当$key的值是数字时可以通过该方法自减1

$redis ->incr($key);//当$key的值是数字时可以通过该方法自增1

$redis ->del($key);//删除指定键值

$redis ->getMultiple ([$key,'lx']);//获取多个键对应的值 返回值:返回包含所有键的值的数组

$redis ->get($key);//获取指定key的值

$redis ->exists($key);//判断键是否存在

```



 

### 3、 redis 操作 List (列表):

 

```

//存储数据到列表中

$redis->lpush('list', 'html');

$redis->lpush('list', 'css');

$redis->lpush('list', 'php');

 

//获取列表中所有的值

$list = $redis->lrange('list', 0, -1);

print_r($list);  echo '<br>'; 

// Array ( [0] => php [1] => css [2] => html )

 

//从右侧加入一个

$redis->rpush('list', 'mysql');

$list = $redis->lrange('list', 0, -1);  

print_r($list);echo '<br>';

// Array ( [0] => php [1] => css [2] => html [3] => mysql )

 

//从左侧弹出一个

$redis->lpop('list');

$list = $redis->lrange('list', 0, -1);

print_r($list);echo '<br>';

// Array ( [0] => css [1] => html [2] => mysql )

 

//从右侧弹出一个

$redis->rpop('list');

$list = $redis->lrange('list', 0, -1);

print_r($list);echo '<br>';

// Array ( [0] => css [1] => html )

```

 

#### 练习:

 

```

$key = 'user';

$redis ->del($key); //每次进来删除$key数据 用于测试

$redis ->lPush($key,1);//从列表头部添加元素

$redis ->rPush($key,2);//从列表尾部添加元素

$redis ->rPush($key,4);

$redis ->lPush($key,4); 

$redis ->lPop($key); 从链表头部删除一个元素,并且返回这个元素的值,由于这个特性是的list非常适合做高并发秒杀

$redis ->lRemove($key,2,3);//删除$key中的2这个值,最多删除三个都为2的值;

$redis ->lSet($key,2,30);//将下标为2的元素设置为30;返回值:成功返回查找的值,失败false

$redis ->lGet($key,0);//获取指定下标的值 返回值:成功返回查找的值,失败false

$redis ->lTrim($key,0,1);//截取保留前两个值,返回值:成功返回查找的值,失败false;一般配合lGetRange使用

$redis ->lGetRange($key,0,-1);//获取所有list链表中$key的所有值【值可以重复】 返回值:成功返回查找的值,失败false

$redis ->lLen ($key);//统计元素个数 同$redis ->lsize ($key)一样 返回值:成功返回查找的值,失败false

```



 

### 4、 redis 操作 Hash (字典):

 

【可以理解为每一个key代表一条数据,同数据库中的行一样】

 

```

<?php

//实例化redis

$redis = new Redis();

//连接

$redis->connect('127.0.0.1', 6379);

//字典

//给hash表中某个key设置value

//如果没有则设置成功,返回1,如果存在会替换原有的值,返回0,失败返回0

echo $redis->hset('hash', 'cat', 'cat');echo '<br>';   // 1

echo $redis->hset('hash', 'cat', 'cat');echo '<br>';   // 0

echo $redis->hset('hash', 'cat', 'cat1');echo '<br>';   // 0

echo $redis->hset('hash', 'dog', 'dog');echo '<br>';   // 1

echo $redis->hset('hash', 'bird', 'bird');echo '<br>';   // 1

echo $redis->hset('hash', 'monkey', 'monkey');echo '<br>';   // 1

//获取hash中某个key的值

echo $redis->hget('hash', 'cat');echo '<br>';  // cat1

 

//获取hash中所有的keys

$arr = $redis->hkeys('hash');

print_r($arr);echo '<br>';

// Array ( [0] => cat [1] => dog [2] => bird [3] => monkey )

 

//获取hash中所有的值 顺序是随机的

$arr = $redis->hvals('hash');

print_r($arr);echo '<br>';

 // Array ( [0] => cat1 [1] => dog [2] => bird [3] => monkey )

 

//获取一个hash中所有的key和value 顺序是随机的

$arr = $redis->hgetall('hash');

print_r($arr);echo '<br>';

 // Array ( [cat] => cat1 [dog] => dog [bird] => bird [monkey] => monkey )

 

//获取hash中key的数量

echo $redis->hlen('hash');echo '<br>';

 // 4

 

//删除hash中一个key 如果表不存在或key不存在则返回false

echo $redis->hdel('hash', 'dog');echo '<br>';

var_dump($redis->hdel('hash', 'rabbit'));echo '<br>';

// 1

// int(0)

```

 

#### 练习:

 

```

【可以理解为每一个key代表一条数据,同数据库中的行一样】

$key1 = 'user';

$key2 = 'user1';

$redis ->delete($key1);

$redis ->hSet($key1,'name','lx');//hash中每一个key对应一个或者多个键值对;就好比mysql中的字段和值;而$key类似一条数据

$redis ->hSet($key1,'age','保密');

$redis ->hSet($key1,'sex','男');

$redis ->hMGet($key2,['name','age']);//获得哈希表中多个 key 的值

$redis ->hMSet($key2,['name'=>'lx','age'=>27]);//给哈希表设置多个key的值

$redis ->hVals($key1);//获得哈希表中所有的值 顺序是随机的

$redis ->hKeys($key1);//获得哈希表中所有的key 顺序是随机的

$redis ->hDel($key1,'user1');//删除一个表中指定的key,如果hash表不存在或对应的key不存在,返回false

$redis ->hLen($key1);//哈表中key的数量说白了就是记录的条数和数据库中的行一样

$redis ->hGet($key1,'user2');

$redis ->hSetNx($key1,'user2','lx');//当哈希表中不存在某key时,给该key设置一个值

$redis ->hExists($key1,'user1');//检查哈希key是否存在 返回值:存在返回 true, 不存在返回 false

$redis ->hGetAll($key2);// 获得一个哈希表中所有的key和value

$redis ->hIncrByFloat($key1,'user3',3.5);//给哈希表中某key增加一个浮点数值,前提是key中已存在的值必须是数值类型

$redis ->hIncrBy($key1,'user3',3);//给哈希表中某key增加一个整数值,前提是key中已存在的值必须是数值类型

 

```



 

### 5、 redis 操作 Set (集合):

 

```

<?php

//实例化redis

$redis = new Redis();

//连接

$redis->connect('127.0.0.1', 6379);

//集合

// 添加一个元素

echo $redis->sadd('set', 'cat');echo '<br>';         // 1

echo $redis->sadd('set', 'cat');echo '<br>';         // 0

echo $redis->sadd('set', 'dog');echo '<br>';        // 1

echo $redis->sadd('set', 'rabbit');echo '<br>';     // 1

echo $redis->sadd('set', 'bear');echo '<br>';      // 1

echo $redis->sadd('set', 'horse');echo '<br>';    // 1

 

// 查看集合中所有的元素

$set = $redis->smembers('set');

print_r($set);echo '<br>';

// Array ( [0] => rabbit [1] => cat [2] => bear [3] => dog [4] => horse )

 

//删除集合中的value

echo $redis->srem('set', 'cat');echo '<br>';    // 1

var_dump($redis->srem('set', 'bird'));echo '<br>';     // int(0)

 

$set = $redis->smembers('set');

print_r($set);echo '<br>';

// Array ( [0] => dog [1] => rabbit [2] => horse [3] => bear )

 

//判断元素是否是set的成员

var_dump($redis->sismember('set', 'dog'));echo '<br>';     // bool(true)

var_dump($redis->sismember('set', 'bird'));echo '<br>';    // bool(false)

 

//查看集合中成员的数量

echo $redis->scard('set');echo '<br>';    // 4

 

//移除并返回集合中的一个随机元素(返回被移除的元素)

echo $redis->spop('set');echo '<br>';  // bear

 

print_r($redis->smembers('set'));echo '<br>';   

 // Array ( [0] => dog [1] => rabbit [2] => horse )

 

<?php

//实例化redis

$redis = new Redis();

//连接

$redis->connect('127.0.0.1', 6379);

//集合

$redis->sadd('set', 'horse');

$redis->sadd('set', 'cat');

$redis->sadd('set', 'dog');

$redis->sadd('set', 'bird');

$redis->sadd('set2', 'fish');

$redis->sadd('set2', 'dog');

$redis->sadd('set2', 'bird');

 

print_r($redis->smembers('set'));echo '<br>';

 // Array ( [0] => cat [1] => dog [2] => bird [3] => horse )

print_r($redis->smembers('set2'));echo '<br>';

// Array ( [0] => bird [1] => dog [2] => fish )

 

//返回集合的交集

print_r($redis->sinter('set', 'set2'));echo '<br>';

// Array ( [0] => dog [1] => bird )

 

//执行交集操作 并结果放到一个集合中

$redis->sinterstore('output', 'set', 'set2');

print_r($redis->smembers('output'));echo '<br>';

// Array ( [0] => dog [1] => bird )

 

//返回集合的并集

print_r($redis->sunion('set', 'set2'));echo '<br>';

// Array ( [0] => cat [1] => dog [2] => bird [3] => horse [4] => fish )

 

//执行并集操作 并结果放到一个集合中

$redis->sunionstore('output', 'set', 'set2');

print_r($redis->smembers('output'));echo '<br>';

 // Array ( [0] => cat [1] => dog [2] => bird [3] => horse [4] => fish )

 

//返回集合的差集

print_r($redis->sdiff('set', 'set2'));echo '<br>';

// Array ( [0] => horse [1] => cat )

 

//执行差集操作 并结果放到一个集合中

$redis->sdiffstore('output', 'set', 'set2');

print_r($redis->smembers('output'));echo '<br>';

// Array ( [0] => horse [1] => cat )

```

 

#### 练习:set集合 

 

```

【和list不同的是set不允许有同样的值】

$key1 = 'user1';

$key2 = 'user2';

$redis->delete($key1);

$redis->delete($key2);

$redis ->sAdd($key1,'2');//为一个键添加一个值 返回值:成功返回true,失败false

$redis ->sAdd($key1,'1');

$redis ->sAdd($key2,'2');

$redis ->sAdd($key2,'3');

$redis ->sRemove($key,'1');//删除指定值 返回值:成功返回true,失败false

$redis ->sContains($key1,'3');//判断$key1中是否有指定值 返回值:成功返回true,失败false

$redis ->sSize($key1);//返回集合中存储值的数量 返回值:成功返回数组个数,失败0

$redis ->sPop($key1);//随机移除并返回key中的一个值 返回值:成功返回删除的值,失败false

$redis ->sUnion($key2,$key1);//返回所有指定键的并集 返回值:成功返回合并后的集,失败false

$redis ->sInterStore ('user3',$key2,$key1);//执行sInter命令并把结果储存到新建的集合中 返回值:成功返回,交集的个数,失败false

$redis ->sInter($key1,$key2);//返回两个指定集合的交集 返回值:成功返回数组交集,失败false

$redis ->sUnionStore('user3',$key2,$key1);//执行sunion命令并把结果储存到新建的变量中 返回值:成功返回,交集的个数,失败false 

$redis ->sMembers($key1);//获取集合内所有值

$redis ->sisMember ($key1,2);//如果成员元素2是集合$key1,的成员返回1,如果成员元素不是集合的成员,或key不存在返回0

$redis ->sDiffstore('user3',$key1,$key2);//执行sdiff命令并把结果储存到新建的变量中。返回值:成功返回数字,失败false

$redis ->sdiff($key1,$key2);//返回第一个集合中存在并在第二个集合中不存在的结果 返回值:成功返回数组,失败false 返回值:成功返回交集的个数,失败false 

$redis ->sort($key1);//当集合内都为数值时返回排序之后的结果 只要有一个值不是数值都不返回结果

$redis ->sCard($key1);//返回SET容器的成员数

```



 

### 6、 redis 操作 Sorted Set (有序集合):

 

```

<?php

//实例化redis

$redis = new Redis();

//连接

$redis->connect('127.0.0.1', 6379);

//有序集合

//添加元素 分数

echo $redis->zadd('set', 1, 'cat');echo '<br>';      // 1

echo $redis->zadd('set', 2, 'dog');echo '<br>';    // 1

echo $redis->zadd('set', 3, 'fish');echo '<br>';    // 1

echo $redis->zadd('set', 4, 'dog');echo '<br>';    // 0

echo $redis->zadd('set', 4, 'bird');echo '<br>';    // 1

 

//返回集合中的所有元素

print_r($redis->zrange('set', 0, -1));echo '<br>';

// Array ( [0] => cat [1] => fish [2] => bird [3] => dog )

 

print_r($redis->zrange('set', 0, -1, true));echo '<br>';

// Array ( [cat] => 1 [fish] => 3 [bird] => 4 [dog] => 4 )

 

//返回元素的score值

echo $redis->zscore('set', 'dog');echo '<br>';

// 4

 

//返回存储的个数

echo $redis->zcard('set');echo '<br>';

// 4

 

//删除指定成员

$redis->zrem('set', 'cat');

print_r($redis->zrange('set', 0, -1));echo '<br>';

// Array ( [0] => fish [1] => bird [2] => dog )

 

//返回集合中介于min和max之间的值的个数

print_r($redis->zcount('set', 3, 5));echo '<br>';

// 3

 

//返回有序集合中score介于min和max之间的值

print_r($redis->zrangebyscore('set', 3, 5));echo '<br>';

 // Array ( [0] => fish [1] => bird [2] => dog )

print_r($redis->zrangebyscore('set', 3, 5, ['withscores'=>true]));echo '<br>';

 // Array ( [fish] => 3 [bird] => 4 [dog] => 4 )

 

//返回集合中指定区间内所有的值 倒叙

print_r($redis->zrevrange('set', 1, 2));echo '<br>';

 // Array ( [0] => bird [1] => fish )

print_r($redis->zrevrange('set', 1, 2, true));echo '<br>';

// Array ( [bird] => 4 [fish] => 3 )

 

//有序集合中指定值的socre增加

echo $redis->zscore('set', 'dog');echo '<br>';

 // 4

$redis->zincrby('set', 2, 'dog');

echo $redis->zscore('set', 'dog');echo '<br>';

// 6

 

//移除score值介于min和max之间的元素

print_r($redis->zrange('set', 0, -1, true));echo '<br>';

// Array ( [fish] => 3 [bird] => 4 [dog] => 6 )

print_r($redis->zremrangebyscore('set', 3, 4));echo '<br>';

 // 2

print_r($redis->zrange('set', 0, -1, true));echo '<br>';

 // Array ( [dog] => 6 )

上一篇:(java新手踩坑篇)关于多态的上下转型问题,伪向下转型,向下转型的意义


下一篇:python面向对象之多态,类属性,类方法,静态方法