<?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->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'));
//设置过期时间
/**
* 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,而不会抛出异常,不会抛出异常,不会抛出异常****
$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);
剩下的操作见:点击打开链接