Home  >  Article  >  Backend Development  >  Scenarios for applying Redis Php in projects, project redisphp scenarios_PHP tutorial

Scenarios for applying Redis Php in projects, project redisphp scenarios_PHP tutorial

WBOY
WBOYOriginal
2016-07-12 08:50:371038browse

Scenarios of applying Redis Php in projects, project redisphp scenarios

Foreword

In some cases, some students said why the string type cannot be used. The string type can be completely implemented

I suggest you read my column "Advanced Usage of Redis", which introduces the benefits of using hash type

Product dimension count

Count product likes, comments, appraisals, and views
Speaking of e-commerce, products are definitely inseparable, and the accompanying products have various counts (number of likes, number of comments, number of appraisals, number of views, etc.)
Redis commands are all atomic, and you can easily use INCR, DECR and other commands to count.

Use the Redis type: Hash. If you are not familiar with the redis data type, you can refer to
http://redis.io/topics/data-types-intro

Define a key product: for product, and define a hashkey for each value, such as like number 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)

User dimension count

Count the number of user updates, number of followers, number of fans, number of liked products, number of posts, etc.
Both user dimension counting and product dimension counting use Hash. Define a key for User as user:
Define a hashkey for each value, such as the number of followers follow

$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)

                                                       
Storing social relationships

For example, the user’s friends/fans/follows can be stored in a sorted set, and the score can be timestamp

The default collection is sorted by increasing score
To find mutual friends between two people, you may only need to use the intersection command

$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')

Used as cache instead of memcached

Apply to product list, comment list, @tip list

Compared with memcached’s simple key-value storage, redis has numerous data structures (list, set, sorted set, hash,

etc)

It can cache various business data more conveniently, and its performance is no less than memcached.

NOTE: RPUSH pagewviews.user: EXPIRE pagewviews.user: 60 //Pay attention to update timeout

Anti-spam system

Spam control for application system comments, product publishing, and forum postings

As an e-commerce website, it is inevitable to be attacked by various spam (spam comments, posting spam products, advertisements, brushing the ranking of your own products, etc.)

Develop a series of anti-spam rules for these spams, some of which can use redis for real-time analysis

For example: no more than 2 comments in 1 minute, less than 5 comments in 5 minutes, etc. (More mechanisms/rules need to be combined with drools)

Regular sorted set records user operations in the last day
(Why not record everything? To save memory, all operations will be recorded in the log, and Hadoop will be used for more comprehensive analysis and statistics in the future)

#获取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次';


 

User Timeline/Feeds

Apply to people, topics, brands and columns you follow

Redis is mainly used as cache here

$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为准

Latest List & Ranking

Used to record business scenarios such as the latest list or ranking of products that the user just liked

The latest list of products-sorted set structure presentation

    $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
      )
    

Ranking list-list data structure presentation

    $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
    )

Message notification

Use Hash structure to count message notification business scenarios


$redis->hSet('user:1000:message:notice', 'system', 1);
#设置1条未读系统消息

$redis->hIncrBy('user:1000:message:notice', 'system', 1);
#未读系统消息+1

$redis->hSet('user:1000:message:notice', 'comment', 1);
#设置1条未读评论

$redis->hIncrBy('user:1000:message:notice', 'comment', 1);
#未读评论+1

$redis->hGetAll('user:1000:message:notice');
#查看所有消息通知数量

Array
(
  [system] => 2
  [comment] => 2
)



Use Redis as a message queue

Using Redis’ List data structure to implement distributed message queue

http://www.bkjia.com/PHPjc/1133110.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/1133110.htmlTechArticleScenarios for applying Redis Php in the project, project redisphp scenario Preface In some cases, some students said why string cannot be used Type, string type can be implemented completely. I suggest you take a look...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn