Redis는 ANSI C 언어로 작성된 오픈소스 로그형 Key-Value 데이터베이스로, 네트워크를 지원하고, 메모리 기반 및 영속성이 가능하며, 다국어로 API를 제공합니다. 오늘은 Redis와 결합된 PHP의 몇 가지 애플리케이션 시나리오를 살펴보겠습니다. 이것이 모든 사람에게 도움이 되기를 바랍니다.
머리말
어떤 학생들은 왜 문자열 유형을 사용할 수 없는지 말하더군요.
해시 사용을 소개하는 제 칼럼 "Advanced Usage of Redis"를 읽어보시길 권합니다. 종류별 장점
상품의 크기 카운팅
상품 좋아요, 댓글, 평가, 조회수를 세어보세요
전자상거래라고 하면 상품은 확실히 뗄래야 뗄 수 없는 상품이고, 부대상품은 다양한 카운트(좋아요 개수, 개수, 개수)가 있습니다. 댓글 수, 평가 수, 조회 수 등)
Redis 명령은 모두 원자적이므로 INCR, DECR 및 기타 명령을 사용하여 쉽게 계산할 수 있습니다.
Redis 유형 사용: Hash Redis 데이터 유형에 익숙하지 않은 경우
http://redis.io/topics/data-types-intro
를 참조하세요. 핵심 제품 정의: 제품별, 각 유형 좋아요 수 like_num
$redis->hSet('product:123', 'like_num ', 5); // 添加 id为123的商品 like_num 为5 $redis->hIncrBy('product:123', 'like_num ', 1); // 添加 id为123的商品like_num +1 $redis->hGetAll('product:123'); // 获取id为123的商品相关信息 array('like_num '=> 1)
사용자 차원 개수
사용자 업데이트 수, 팔로우 수, 팬 수, 제품 좋아요 수, 게시물 수 등의 수치 정의 해시 키
사용자 차원 계산 및 제품 차원 둘 다 해시를 사용하여 계산합니다.
팔로잉 번호와 같은 각 값에 대한 해시키를 정의합니다. 기본 세트는 점수에 따라 오름차순으로 정렬됩니다
이런 식으로 두 사람의 공통 친구를 찾으려면 교차 명령만 사용하면 됩니다
$redis->hSet('user:100000', 'follow ', 5); // 添加uid为10000的用户follow 为5 $redis->hIncrBy('user:100000', 'follow ', 1); // 更新uid为10000的用户follow +1 $redis->hGetAll('user:100000'); // 获取uid为10000的用户 array('like_num '=> 1)
제품 목록, 댓글 목록, @tip 목록에 적용
memcached의 간단한 키-값 저장에 비해 Redis의 다양한 데이터 구조(list, set, sorted set, hash,
etc)
는 캐싱에 더 편리할 수 있습니다. 다양한 비즈니스 데이터의 처리량은 memcached에 못지 않습니다.
참고: RPUSH pagewviews.user: EXPIRE pagewviews.user: 60 //업데이트 시간 초과에 주의하세요
스팸 방지 시스템
As 전자상거래 업체 웹사이트는 각종 스팸(스팸댓글, 스팸상품 게시, 광고, 자사 상품 순위 비방 등)의 공격을 받을 수밖에 없습니다.
이러한 스팸에 대한 일련의 스팸방지 규칙을 개발하세요. , 그 중 일부는 redis를 사용하여 실시간으로 분석될 수 있습니다
예: 1분에 댓글 2개 이하, 5분에 댓글 5개 미만 등. (더 많은 메커니즘/규칙을 drools와 결합해야 함)
(모두 기록하지 않는 이유는 무엇입니까? 메모리 절약, 모든 작업 로그가 기록되며 나중에 Hadoop을 사용하여 보다 포괄적인 분석 및 통계에 사용됩니다)$redis->zAdd('user:1000:follow', 1463557212, '1001');
#uid为1000用户关注uid为1001 , score值设定时间戳1463557212
$redis->zAdd('user:1000:follow', 1463557333, '1002');
$redis->zAdd('user:2000:follow', 1463577568, '1001');
$redis->zAdd('user:2000:follow', 1463896964, '1003');
#uid为2000用户关注1001和1003用户 , score值设定时间戳
$redis->zInter('com_fllow:1000:2000', array('user:1000:follow', 'user:2000:follow'));
#对集合'user:1000:follow'和'user:2000:follow'取交集'com_fllow:1000:2000'
#获得共同关注的uid
$redis->zRange('com_fllow:1000:2000',0,-1); // 获取全部集合元素
#array('10001','10002')
사용자 타임라인/피드
관심 있는 인물, 토픽, 브랜드, 칼럼에 적용
redis는 주로 여기서 캐시로 사용됩니다
#获取5秒内操作记录 $res = $redis->zRangeByScore('user:1000:comment', time() - 5, time()); #判断5秒内不能评论 if (!$res) { $redis->zAdd('user:1000:comment', time(), '评论内容'); } else { echo '5秒之内不能评论'; } #5秒内评论不得超过2次 if($redis->zRangeByScore('user:1000:comment',time()-5 ,time())==1) echo '5秒之内不能评论2次'; #5秒内评论不得少于2次 if(count($redis->zRangeByScore('user:1000:comment',time()-5 ,time()))<2) echo '5秒之内不能评论2次';
Latest List & Ranking
$redis->zAdd('user:2000:feed:topic', time(), '13'); //score 为timestamp uid为2000的用户关注tid为13的topic $redis->expire('user:2000:feed:topic',24*60*60); #关注有效期为24小时 # ttl 30天之内按秒数计算 30天之外以timestamp为准랭킹 목록 데이터 구조 프레젠테이션
$redis->zAdd('user:1000:product:like', time(), '3002'); $redis->zAdd('user:1000:product:like', time(), '3001'); $redis->zAdd('user:1000:product:like', time(), '3004'); $redis->zAdd('user:1000:product:like', time(), '3003'); $redis->zRange('user:1000:product:like', 0, -1,true); #默认喜欢时间升序序排列 # Array( [3002] => 1463565179 [3001] => 1463565189 [3004] => 1463565199 [3003] => 1463565209 ) $redis->zRevRange('user:1000:product:like', 0, -1,true); #以喜欢时间降序排列 # Array ( [3003] => 1463565424 [3004] => 1463565414 [3001] => 1463565404 [3002] => 1463565394 )
해시 구조를 사용하여 메시지 알림 비즈니스 시나리오 계산
$redis->lPush('user:1000:product:like', '3002'); $redis->lPush('user:1000:product:like', '3001'); $redis->lPush('user:1000:product:like', '3004'); $redis->lPush('user:1000:product:like', '3003'); $redis->lRange('user:1000:product:like', 0, -1); Array ( [0] => 3003 [1] => 3004 [2] => 3001 [3] => 3002 )
Redis를 메시지 큐로 사용 Redis의 List 데이터 구조를 사용하여 분산 메시지 큐 구현
관련 권장 사항 :
PHP의 Redis 확장 프로그램은 설치부터 사용까지
위 내용은 PHP 프로젝트에서 Redis를 사용해야 하는 시나리오의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!