php之redis笔记1

<?php
/**
 * php之redis笔记整理One:
 * 一.redis五种数据类型的使用场景
 * 1.String
 *  1)string是最常用的一种数据类型,普通的key/value存储都归为此类,value不仅是string,还可以是int
 *  2)常用命令:get,set,incr,decr,mget,mset
 *
 *
 * 2.Hash
 *  1)应用场景:举例说明,比如我们存储一个用户信息对象数据,包含以下信息:
 *          用户Id,为查找的key,
 *          存储的value用户对象包含姓名name,年龄age,生日birthday等信息,
 * 如果采用普通的key/结构来存储,主要有以下两种形式:
 * a.将用户Id作为key,把其他信息封装成一个对象以序列化的方式存储,
 *   如:set u001 "李三,21,19920405"
 *   这种方式的缺点是:增加了序列化/反序列化的开销,并且在需要修改其中的一项信息时候,需要把整个对象取出来,并且修改操作需要并发进行保护,引入CAS等复杂问题.
 * b.这个用户信息对象有多少个成员就存成多少个key-value对儿,用用户id+对应的属性名作为唯一标识来取得对应属性的值,'
 *   如:mset user:001:name '李三' user:001:age 21 user:001:birthday 19920405
 *   这种方式的缺点是虽然省略了序列化和反序列化开销和并发问题,但是用户Id为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。
 * 那么redis提供的hash很好的解决了这个问题,redis的hash实际是内部存储的value为一个hashmap,并提供了直接存储这个map成员的接口
 * 如:hmset user:001 name '李三' age 18 birthday "19920405"
 * 这样既不需要重复储存数据,也不需要带来序列化和并发修改控制的问题
 *  2)常用命令:hget,hset,hgetall
 *
 *
 * 3.List(列表)
 *  1)应用场景:redis list的应用场景非常的多,也是redis最重要的数据结构之一,我们可以轻松的实现最新消息排行等功能。
 *    list的另外一个应用就是消息队列,可以利用list的push操作,然后工作线程再利用pop操作将任务取出来进行执行
 *  2)常用命令:lpush,lpop,rpush,rpop,lrang等
 *
 *
 * 4.Set(集合)
 *  1)应用场景:set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,
 *  由不希望出现重复数据的时候,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,而list没有
 *  比如在微博应用中,每个人的好友存在一个set中,这样求两个人的共同好友的操作,可能只需要求交集命令即可。redis还为集合
 *  提供了求交集,并集,差集等操作
 * 2)常用命令:sadd,srem,spop,sdiff,smembers,sunion等
 *
 *
 * 5.Sort Set(有序集合)
 *  1)应用场景:以某个条件为权重,比如按顶的次数排序。ZREVRANGE命令可以用来按照得分来获取前100名的用户,ZRANK可以用来获取用户排名
 *  非常直接而且操作容易。sort set与set类似,区别是set不是自动有序的,而sort set可以通过为用户额外提供一个优先级(score)的参数来为成员排序
 *  并且插入有序的,即自动排序。
 *  2)常用命令:zadd,zrange,zrem,zcard等
 *
 */


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


/**
 * String(字符串)类型操作
 */
/*
//设置key/name键值对
$redis->set('name','wuchao');
$redis->set('age',24);
//获取key对应的value
$name = $redis->get('name');
//设置key/value的过期时间
$redis->expire('name',1);
//获取key/value剩下的过期时间
$leftExpireTime = $redis->ttl('name');
//为age的值加1

$redis->incr('age');


****注意:incr正常情况返回增加后的值(若原来键不存在就返回1),但是当redis服务器只读的时候会返回false,false,false,而不会抛出异常,不会抛出异常,不会抛出异常****


//为age的值加2
$redis->incrBy('age',2);
//exitst检测某个键值对是否存在
$redis->exists('age');
//删除某个键值对
//$redis->del('age');
//append在已经存在的字符串屁股后面加一截字符串
$redis->append('name',' Come on');
//获取字符串的长度
$redis->strlen('name');
//获取字符串的指定字符部分
$redis->substr('name',0,5);
var_dump($redis->get('name'));
*/


/**
 * list(队列/栈操作)
 * rpush/rpushx:从队列后插入元素(r->right)
 * lpush/lpushx:从队列的头部插入元素(x表示只对已经存在的key进行插入元素操作)
 */
//往列表的尾部插入一个元素
//$redis->rPush('fooList','first');
//$redis->rPush('fooList','second');
//$redis->rPush('fooList','third');
//类似栈结构德弹出(并删除)最左的一个元素
//$redis->lPop('fooList');
//类似栈结构德弹出(并删除)最右的一个元素
//$redis->rPop('fooList');
//lLen(返回当前列表的长度)
$redis->lLen('fooList');
//lIndex返回指定顺序位置的list元素
$redis->lIndex('fooList',1);
//lRange返回队列中某个区间的元素
//var_dump($redis->lRange('fooList',0,100));
//检测某个健对应的元素是否存在
var_dump($redis->exists('fooList'));
//设置过期时间

$redis->expire('fooList',1);

剩下的操作见:点击打开链接



猜你喜欢

转载自blog.csdn.net/phpduang/article/details/53710176
今日推荐