Redis is an open source API that is written in ANSI C, supports the web, can be persisted in memory, key-value databases, and provides multiple languages. Today, we look at some of the applications of PHP combined with Redis, and we hope to help you.
Objective
Some of the students in some cases say why can not use String type, string type can be fully implemented AH
I suggest you look at my column, "Redis Advanced Usage," which describes the benefits of using hash types.
Commodity dimension Count
Count the number of items, number of comments, number of appraisals, number of views
Speaking of e-commerce, must be inseparable from goods, and the goods with a variety of counts (like number, number of reviews, number of appraisals, views, etc)
Redis commands are atomic, and you can easily count them with commands such as INCR,DECR.
The type of Redis used: Hash. If you are not familiar with Redis data types, you can refer to the
Http://redis.io/topics/data-types-intro
Define a key product for product: HashKey for each value, such as a number like_num
$redis->hset (' product:123 ', ' Like_num ', 5); Add an item with ID 123 like_num to 5 $redis->hincrby (' product:123 ', ' Like_num ', 1); Add an item with an ID of 123 like_num +1$redis->hgetall (' product:123 '); Get product-related information for ID 123 Array (' Like_num ' + 1)
Count of user dimensions
Count the number of users, number of followers, number of fans, number of likes, number of posts, etc.
The user dimension count is hashed with the commodity dimension count. Define a key for user as User:
Define HashKey for each value, such as the number of followers follow
$redis->hset (' user:100000 ', ' follow ', 5); Add UID 10000 user follow to 5 $redis->hincrby (' user:100000 ', ' follow ', 1); Update the user with UID 10000 follow +1$redis->hgetall (' user:100000 '); Gets the user with UID 10000 (' like_num ' = + 1)
Store Social relationships
For example, the user's friends/fans/concerns, can exist in a sorted set, score can be timestamp
The default collection is sorted incrementally by score
In this way, the operation of a common friend of two people may only need to use the intersection command.
$redis->zadd (' User:1000:follow ', 1463557212, ' 1001 '); #uid为1000用户关注uid为1001, the score value sets the timestamp 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用户, the score value sets the timestamp $redis->zinter (' com_fllow:1000:2000 ', Array (' User:1000:follow ', ' user : 2000:follow ')); #对集合 ' User:1000:follow ' and ' User:2000:follow ' take the intersection of ' com_fllow:1000:2000 ' #获得共同关注的uid $redis->zrange (' Com_fllow : 1000:2000 ', 0,-1); Get all collection elements #array (' 10001 ', ' 10002 ')
Use as cache instead of memcached
Apply to Product list, comment list, @ hint list
Compared to memcached simple key-value storage, Redis's numerous data structures (list,set,sorted Set,hash,
etc
It can be more convenient to cache various business data, performance is no less than memcached.
Note:rpush Pagewviews.user:EXPIRE pagewviews.user:60//Note to update timeout
Anti-spam system
Spam Control for application reviews, publishing products, forum posts
As an e-commerce site by a variety of spam attacks is less unavoidable (spam reviews, spam, advertising, brush home products rankings, etc.)
Develop a series of anti-spam rules for these spam, some of which can be used for real-time analysis using Redis
For example: 1-minute reviews must not exceed 2 times, 5-minute reviews less than 5 times (more mechanisms/rules need to be combined with drools)
Regular sorted set records the last day of user action
(Why not all records?) Save memory, all operations will be recorded to log, subsequent use of Hadoop for more comprehensive analysis of statistics)
#获取5秒内操作记录 $res = $redis->zrangebyscore (' User:1000:comment ', Time ()-5, Time ()), #判断5秒内不能评论if (! $res) { $redis- >zadd (' User:1000:comment ', Time (), ' comment content ');} else { echo ' cannot comment within 5 seconds ';} #5秒内评论不得超过2次if ($redis->zrangebyscore (' User:1000:comment ', Time ()-5, Time ()) ==1) echo ' cannot comment 2 times within 5 seconds '; Comments must not be less than 2 times in 5 Seconds if (count ($redis->zrangebyscore (' User:1000:comment ', Time ()-5, Time ())) <2) echo ' cannot comment 2 times within 5 seconds ';
User Timeline/feeds
People, themes, brands and columns to focus on
Redis is mostly used as a cache here.
$redis->zadd (' User:2000:feed:topic ', Time (), ' 2000 '),//score for timestamp uid 13 for the topic$redis-> of Tid Expire (' User:2000:feed:topic ', 24*60*60); #关注有效期为24小时 # TTL within 30 days in seconds 30 days outside of the timestamp
Latest Listings & Leaderboards
Used to record the latest list of items the user has just liked. Business scenarios such as or leaderboard
Latest list of items-sorted set structure rendering
$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 )
Leaderboard-LIST Data Structure rendering
$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 '); View all message notifications array ( [System] + 2 [Comment] = 2)
Using Redis as a message queue
Using the Redis list data structure to implement distributed Message Queuing
Related recommendations:
PHP redis extension from installation to use
PHP enables session instance sharing with Redis
phalapi-Cache usage and Redis expansion