Redis 기능과 설치 및 사용
30분06초redis 일반 키 조작 명령
26분20초문자열 구조와 명령어에 대한 자세한 설명
40분49초목록 구조 및 명령어에 대한 자세한 설명
30분33초활성 사용자 수를 계산하는 비트맵 방법
17분54초세트 구조 및 명령어에 대한 자세한 설명
22분22초주문 세트 구조 및 명령어에 대한 자세한 설명
40분57초해시 구조 및 명령어에 대한 자세한 설명
12분00초Redis 트랜잭션 및 잠금 애플리케이션
26분05초채널 게시 및 메시지 구독
11분55초RDB 스냅샷 지속성
36분17초로그 지속성
46분47초Redis 마스터-슬레이브 복제
31분07초Redis 작업 및 유지 관리를 위한 일반 명령
31분18초RDB 서버 간 복구 및 마이그레이션
30분08초센티넬 운영 및 유지 관리 모니터링
40분57초주요 디자인 원칙
46분20초phpRedis 확장 컴파일
19분39초Weibo 프로젝트 사용자 등록 및 Weibo 게시
01시간1117분30초웨이보 프로젝트 팬 관계 및 웨이보 푸시
01시간1122분41초Weibo 쿠키 보안 강화
34분36초해시 데이터 저장 웨이보
29분40초웨이보 핵심 디자인 요약
26분43초팬 풀 모델
01시간1126분43초Weibo 콜드 데이터는 mysql에 기록됩니다.
52분04초고속 쓰기 테스트
01시간1110분46초心魔5年前
PHP Redis 使用手册 key通用命令 $redis->set('key','AA'); //设置某个 $redis->get('key'); //获取某个 $redis->keys('*'); //获取所有 $redis->keys('k*'); //模糊某个 $redis->keys('ke[ty]'); //模糊某个 $redis->randomKey(); //随机返回key $redis->exists('key'); //验证键是否存在,存在返回true $redis->type('key'); //返回类型 $redis->delete('key'); //删除键值 可以传入数组 array('key1','key2')删除多个键 $redis->rename('x', 'y'); //修改键名(可覆盖)return 1 $redis->renamenx('x', 'y'); //修改键名(不可覆盖已有键名) reutrn 1 or 0 $redis->ttl('key'); //查看生命周期(永久周期为-1) $redis->setEx('key', 3600, 'value'); //秒级生命周期 $redis->pSetEx('key', 100, 'value'); //毫秒级生命周期 $redis->persist('key'); //设置永久生命周期 $redis->select(num); //切换数据库(total 16) $redis->flushDb(); //清空数据 string命令 $redis->set('key','AA'); //设置 $redis->setnx('key','AA'); //存在返回false 不存在返回true $redis->setex('key',5,'AA'); //设置 key 生命周期为 5秒 的键值 AA $redis->psetex('key',5000,'AA'); //设置 key 生命周期为 5000毫秒 的键值 AA $redis->mset(array('key0' => 'value0', 'key1' => 'value1')); //批量设置键值 $redis->msetnx(array('key0' => 'value0', 'key1' => 'value1'));//批量设置键值 $redis->setRange('key', 2, '00'); //如果key的value=abcdef c开始替换2个为0即为:ab00ef 如果游标溢出 则用补\x00! $redis->get('key'); //获取 $redis->mget(array('key1','key2')); //批量获取键值,返回一个数组 $redis->getRange('key', 0, 5); // 键值截取从0位置开始到5位置结束 (start游标溢出则为空) $redis->getSet('key','BB'); //将键key的值设置为BB, 并返回这个键值原来的值AA $redis->append('key', '00'); //如果key的value=abcdef,追加到键值后面,键值为abcdef00 $redis->incr('num'); //键值加1 $redis->incrby('num',-10); //键值加减10 $redis->incrByFloat('num', +/- 1.5); //键值加减小数 $redis->decr('num'); // 键值减1 $redis->decrBy('num',10); // 键值减10 $redis->strlen('key'); //键值长度 --------------------------------------------------------------------------------------- $redis->set('key', "*"); // ord("*") = 42 = 0x2f = "0010 1010" $redis->setBit('key', 5, 1); /* returns 0 */修改二进制位 $redis->get('key'); /* chr(0x2f) = "/" = b("0010 1111") */ list命令 $redis->lPush('list', 'A'); //插入 链表 左侧进入,返回链长度 内容:A $redis->rPush('list', 'B'); //插入 链表 右侧进入,返回链长度 内容:AB $redis->lRange('list', 0, 2); //链表截取 从0开始 2位置结束(-1为全部) $redis->lPop('list'); //删除list最左一个单位 返回list $redis->rPop('list'); //删除list最右一个单位 返回list $redis->lRem('list', 'b', 2); //list=abcdabcdabcd链表从左开始删除元素2个b ;-2 从右开始 删除元素2个b $redis->lTrim('list', 0, 2); //list=abcda截取下标 从0开始,截取到2 内容:list=abc $redis->lindex('list',0); //返回0所在单元的值 $redis->llen('list','list'); //返回list单元个数 $redis->lInsert('list', Redis::BEFORE|Redis::AFTER, 'C', 'B'); //在C元素之前插入B $redis->rpoplpush('list1', 'list2'); //从一个链表原子到另一个链表 set命令 $redis->sAdd('key' , 'AA'); //插入元素 $redis->sMembers('key'); //获取容器key中所有元素 $redis->sRem('key' , 'AA'); //移除容器中的TK $redis->sMove('key','key1','AA'); //将容易key中的元素AA 移动到容器key1 操作成功返回TRUE $redis->sPop('key'); //随机返回容器中一个元素,并移除该元素 $redis->sRandMember('key'); //随机返回容器中一个元素,不移除该元素 $redis->sCard('key'); //返回SET容器的成员数 $redis->sIsMember('key','AA'); //检查VALUE是否是SET容器中的成员 $redis->sInter('key','key1'); //交集 $redis->sInterStore('store','key','key1'); //将集合key和集合key1的 交集 存入store $redis->sUnion('key','key1'); //并集 $redis->sUnionStore('store','key','key1');//集合key和集合key1的 并集 保存在集合store中 $redis->sDiff('key','key1','key2'); //返回数组,存在于key集合而不存在于集合key1 key2 order set 命令 $redis->zAdd('zkey', 1, 'A'); //插入A关联score 1 $redis->zRange('zkey',0,-1); //获取集合元素,从0位置 到 -1 位置 $redis->zRange('zkey',0,-1, true); //获取集合元素,从0位置 到 -1 位置, 返回一个关联数组带 分数 $redis->zDelete('zkey', 'B'); //移除集合tkey中元素B 成功返回1 失败返回 0 $redis->zRevRange('zkey', 0, -1); //获取集合元素,从0位置 到 -1 位置,数组按照score降序处理 $redis->zRevRange('zkey', 0, -1,true);// 获取集合元素,从0位置 到 -1 位置,数组按照score降序处 理 返回score关联数组 $redis->zRangeByScore('zkey', 0, 0.2,array('withscores' => true)); //获取几个zkey中score 在区间[0,0.2]元素 ,score由低到高排序,元素具有相同的 score,那么会按照字典顺序排列 , withscores控制返回关联数组 $redis->zRangeByScore('zkey', 0.1, 0.36, array('withscores' => TRUE, 'limit' => array(0, 1))); //其中limit中 0和1 表示取符合条件集合中 从0位置开始,向后扫 描1个 返回关联数组 $redis->zCount('zkey', 2, 10); // 获取zkey中score在区间[2, 10]元素的个数 $redis->zRemRangeByScore('zkey', 1, 3); // 移除zkey中score在区间[1, 3](含边界)的元素 $redis->zRemRangeByRank('zkey', 0, 1); /默认元素score是递增的,移除zkey中元素 从0开始到-1位置 $redis->zSize('zkey'); //返回存储在key对应的有序集合中的元素的个数 $redis->zScore('zkey', 'A'); // 返回集合tkey中元素A的score值 $redis->zRank('zkey', 'A'); // 返回集合zkey中元素A的索引值z集合中元素按照score从低到高 进行排列 ,即最低的score index索引为0 $redis->zIncrBy('zkey', 2.5, 'A'); // 将集合zkey中元素A的score值 加 2.5 $redis->zUnion('union', array('zkey', 'zkey1'));// 将集合tkey和集合tkey1元素合并于集合union $redis->zUnion('ko2', array('k1', 'k2'), array(5, 2));//集合k1和集合k2并集k02,k1*5,k2*2, 相同元素 score sum $redis->zInter('ko1', array('k1', 'k2')); // 集合k1和集合k2取交集于k01 按照score值递增排序 如果集合元素相同,score值相加 $redis->zUnion('ko2', array('k1', 'k2'), array(10, 2),'MAX');// 各个子集乘以因子之后,递增排 序,相同的 score取最大值(MAX)也可以设置MIN 取最小值 $redis->zInter('ko1', array('k1', 'k2'), array(5, 1));//集合k1和集合k2取交集k01k1*5,k2*2, 相同元素 score sum、 $redis->zInter('ko1', array('k1', 'k2'), array(5, 1),'MAX'); // 各个子集乘以因子之后,元素 score按照递增排序,相同的元素score取最大值(MAX)也可以设置 MIN 取最小值 hash 命令 $redis->hSet('h', 'name', 'AA'); //h 添加name字段 value为AA $redis->hSetNx('h', 'name', 'AA'); //h 添加name字段 value为AA 如果字段name的 value存在返回false 否则返回 true $redis->hGet('h', 'name'); // 获取h表中name字段value $redis->hLen('h'); // 获取h表长度即字段的个数 $redis->hDel('h','name'); // 删除h表中name字段 $redis->hKeys('h'); // 获取h表中所有字段 $redis->hVals('h'); // 获取h表中所有字段value $redis->hGetAll('h'); // 获取h表中所有字段和value 返回一个关联数组(字段为键值) $redis->hExists('h', 'name'); // 判断name 字段是否存在与表h 不存在返回false $redis->hIncrBy('h', 'age', -2); // 设置h表中age字段value加(-2) 如果value是个非数值 则返回 false 否则,返回操作后的value $redis->hMset('h', array('score' => '80', 'salary' => 2000)); // 表h 批量设置字段和value $redis->hMGet('h', array('score','salary')); // 表h 批量获取字段的value 事物 $redis->set('money',100); //设置金额100 $redis->watch('money'); //监听(乐观锁) $redis->set('money',0); //其他操作金额为0 $ret = $redis->multi() //开启事务 ->decrBy('money',10) //减金额10 ->exec(); //执行 不成功 //由于其他事物操作,事物监听到修改后事物不执行 订阅 //订阅端 $redis->subscribe(array('chan-1'),'f'); //设置接收订阅频道 //发布端 $redis->publish('chan-1', 'hello, world!'); // 发布订阅 //订阅端 发布端发布消息后,订阅端及时收到发布的消息
1