PHP操作redis之String(字符串)、List(列表)(一)
程序员文章站
2022-04-04 16:41:51
Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key – value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的ke ......
Redis 简介
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key – value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
- 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
- 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
- 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
- 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
Redis与其他key-value存储有什么不同?
-
Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
-
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
下面首先来看看PHP操作redis的string(字符串)和List(列表):
1 //操作redis 2 $redis = new \Redis(); 3 $redis->connect('127.0.0.1',6379); 4 $redis_con = $redis->ping(); 5 if( $redis_con != "+PONG"){ 6 echo "redis连接出错!"; 7 exit(); 8 } 9 10 // Strng(字符串): 11 // ╔ ╔═╗ ╗╠╦═╗╔═╩══╗╔═╮╔═╮╔══╠═╗ 12 // ╠╔═╗═╗ ║║║ ║═══╗╯╚╚╰╚╚ ║ ║ ║ 13 // ║╚═╝═╝ ║╯╠═╗╰ ╔╝ ╔╯ ══╠╚══╠═╯ 14 // ║╚═╦╠╝╚╯ ║ ╰╮ ║║ ╗ ║╔══╠═╗ 15 // ╠╔ ║╠╗ ║ ╠═╗╚═══╠╝║║ ╰═║║ ║ ║ 16 // ╚╚═╝╝╯ ╰╝╚ ╰═══╝ ╝ ╚═╝╚══╚═╯ 17 $redis->set('name', 'zhangxiansheng'); 18 $redis->set('age', '24'); 19 $redis->set('addr', '南京'); 20 $redis->mset(array('QQ'=>'123456789','phone'=>15950562931,'sex'=>'男','job'=>'PHP')); 21 $redis->incr('age'); //age的值加上1 25 22 $redis->decr('age'); //age的值减去1 23 23 $redis->incrBy('age','5'); //age的值加上指定的值 5 29 24 $redis->decrBy('age','5'); //age的值加上指定的值 5 19 25 $redis->append('name','先生'); 26 $all = $redis->mget(array('name','age','addr','QQ','phone','sex','job')); 27 //获取key的值 28 $redis->exists('name'); //测试指定key是否存在 存在返回1 29 $redis->del('name','age','addr'); //del key1 key2 ..... keyN 删除给定的key 30 $redis->rename('name','nameX'); //rename oldkey newkey 改名字 31 $redis->expire('QQ','20'); //为key指定过期时间 32 $redis->ttl('QQ'); // 返回剩余key的过期秒数 33 $redis->move('phone',1); //将key从当前数据库移动到指定数据库 1代表的是第二个数据库 34 echo $redis->get('name');echo "<br/>"; //zhangxiansheng先生 35 echo $redis->get('age'); echo "<br/>"; //24 36 echo $redis->get('addr'); echo "<br/>"; //南京 37 dump($all);echo"<br />"; 38 //array (size=7) 39 // 0 => string 'zhangxiansheng先生' (length=20) 40 // 1 => string '24' (length=2) 41 // 2 => string '南京' (length=6) 42 // 3 => string '123456789' (length=9) 43 // 4 => string '15950562931' (length=11) 44 // 5 => string '男' (length=3) 45 // 6 => string 'PHP' (length=3) 46 47 $redis->set('name',"zhangsir"); 48 $redis->get('name'); //zhang sir 覆盖掉原来的 张先生 49 50 // List(列表) 51 // ╔ ╔═╗ ╗╠╦═╗╔╦═╗ ╗╔══╠═╗ 52 // ╠╔═╗═╗ ║║║ ╠═╗╗║ ║ 53 // ║╚═╝═╝ ║╯╠═╗ ║ ║║║╚══╠═╝ 54 // ║╚═╦╠╝╚╯ ║ ║║║║║╚═╦╩═╝ 55 // ╠╔ ║╠╗ ║ ╠═╗ ╝║║╝║╭╦╝═╦╯ 56 // ╚╚═╝╝╯ ╰╝╚ ╚══╯ ╝╚╚═╯╰╝ 57 $redis->select(1); // 选择数据库 58 $redis->keys('*'); // 获取所有的key 59 $redis->flushDB(); // 删除当前数据库所有的key 60 $redis->lPush('newUsers','user1'); // \ 61 $redis->lPush('newUsers','user2'); // |=> 在key对应list的头部添加字符串元素 62 $redis->lPush('newUsers','user3'); // / 63 64 $redis->rPush('newUsers','user4'); // 在key对应list的尾部添加字符串元素 65 66 $redis->lRange('newUsers',0,2); // 返回制定区间内的元素,下表从0开始 67 68 // array (size=3) 69 // 0 => string 'user3' (length=5) 70 // 1 => string 'user2' (length=5) 71 // 2 => string 'user1' (length=5) 72 // 3 => string 'user4' (length=5) 73 74 $redis->rPop('newUsers'); //从list的尾部删除元素,并返回删除元素 75 $redis->lPop('newUsers'); //从list的头部删除元素,并返回删除元素 76 $redis->lLen('newUsers'); //对应list的长度,key不存在的返回0,如果key对应类型不是list 返回错误 77 $redis->lTrim('newUsers',0,2); //截取list,保留制定区间内的元素