香港高速VIP云机房火爆上线啦!无需备案,开通即用!配套《巅云自助建站系统3.0》将带给您飞一般的可视化拖拽建站体验,欢迎免费体验。

项目中应用Redis+Php的场景

一佰互联网站制作(www.yinxi.net) 发布日期 2019-04-27 10:44:11 浏览数: 44

前言

一些案例中有的同学说为什么不可以用string类型,string类型完全可以实现呀

我建议你看下我的专栏文章《Redis高级用法》,里面介绍了用hash类型的好处

商品维度计数

对商品喜欢数,评论数,鉴定数,浏览数进行计数说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc)Redis的命令都是原子性的,你可以轻松地利用INCR,DECR等命令来计数。

采用Redis 的类型: Hash. 如果你对redis数据类型不太熟悉,可以参考http://redis.io/topics/data-types-intro

为product定义个key product:,为每种数值定义hashkey, 譬如喜欢数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)

用户维度计数

对用户动态数、关注数、粉丝数、喜欢商品数、发帖数等计数 用户维度计数同商品维度计数都采用 Hash. 为User定义个key 为 user:为每种数值定义hashkey, 譬如关注数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)

                                 存储社交关系

譬如将用戶的好友/粉丝/关注,可以存在一个sorted set中,score可以是timestamp默认集合按照score递增排序这样求两个人的共同好友的操作,可能就只需要用求交集命令即可

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

用作缓存代替memcached

应用于商品列表,评论列表,@提示列表

相对memcached 简单的key-value存储来说,redis众多的数据结构(list,set,sorted set,hash,etc)

可以更方便cache各种业务数据,性能也不亚于memcached。NOTE: RPUSH pagewviews.user: EXPIRE pagewviews.user: 60 //注意要update timeout

反spam系统

应用系统评论、发布商品、论坛发贴的spam控制

作为一个电商网站被各种spam攻击是少不免(垃圾评论、发布垃圾商品、广告、刷自家商品排名等)

针对这些spam制定一系列anti-spam规则,其中有些规则可以利用redis做实时分析

譬如:1分钟评论不得超过2次、5分钟评论少于5次等(更多机制/规则需要结合drools )常规sorted set将最近一天用户操作记录起来(为什么不全部记录?节省memory,全部操作会记录到log,后续利用hadoop进行更全面分析统计)

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

用户Timeline/Feeds

应用于关注的人、主题、品牌及专栏

redis在这边主要当作cache使用

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

最新列表&排行榜

用于记录用户刚刚喜欢的商品最新列表or排行榜 等业务场景

商品最新列表-sorted set结构呈现

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

排行榜-list数据结构呈现

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

消息通知

采用Hash结构对消息通知业务场景计数

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

将Redis用作消息队列

采用Redis的List数据结构实现分布式的消息队列

一佰互联是全国知名建站品牌服务商,我们有九年网站建设、网站制作、网页设计、php开发和域名注册及虚拟主机服务经验,提供的自助建站服务更是全国有名。近年来还整合团队优势自主开发了可视化多用户”巅云建站系统“3.0平台版,拖拽排版网站制作设计,轻松实现pc站、手机微网站、小程序、APP一体化全网营销网站建设 ,已成功的为全国上百家网络公司提供自助建站平台搭建服务。

相关新闻more

01
04月
微信改版啦!微信今日更新公众号的“点赞”变“

简介:微信在今天更新7.0.0版本,不知不觉的我,被这一波骚操作惊艳到了!刚编写好的一条微信公众号,给领导和同事们们各种审核之后,发布了,同... >>详情

17
04月
百度也玩“无人驾驶” 输入目的地汽车即可自动

与Google一样,百度近日也启动了“无人驾驶汽车”的研发计划。据悉,该汽车可自动识别交通指示牌和行车信息,具备雷... >>详情

22
04月
nginx 与后台端口冲突的解决

问题:在起alice管理系统的开发环境的时候,发现后台所有的接口在第一次请求的时候全部产生404错误,但第二次请求成功定位问题查看nginx... >>详情

21
04月
利用css3画个同心圆示例代码

基本思路首先你得画三个圆吧,那三个圆怎么重叠到一块呢?这个就得靠-margin来控制了。<div id="tongxin&q... >>详情

营业执照. cdn加速服务 备案系统认证 网络安全协会 我们的支付方式AAA认证
上海 北京 深圳 广州 天津 杭州 南京 武汉 成都 沈阳 大连 长沙 济南 青岛 苏州 福州 无锡 哈尔滨 宁波 重庆 大庆 厦门 西安 长春 珠海 郑州 海口 昆明 太原 石家庄 温州 合肥 乌鲁木齐 南宁 南通 合肥 兰州 呼和浩特 贵阳 烟台 秦皇岛 包头 唐山 银川 汕头 连云港 威海 西宁 湛江 北海 万州 涪陵 长寿 黔江 永川 丰都 忠县 江津 南川 开县 云阳 万盛 梁平 垫江 巫山 城口 建站宝盒 免费建站 门户网站建设 微信网站 手机网站 门户网站制作

7x24小时服务电话:18581389571 传真:023-85725751 免费建站交流群:236412099 139947842(自助建站交流) E-Mail:post@yinxi.net 网站投诉:
重庆楚捷科技有限公司 一佰互联©版权所有 自助建站(www.yinxi.net,Inc.) 2001-2020 All Rights Reserved 本站程序受法律保护,网站法律顾问:ITLAW-庄毅雄律师
中华人民共和国信息产业部网站备案号:渝ICP备12000592号