时间:2021-05-26
前言
一些案例中有的同学说为什么不可以用string类型,string类型完全可以实现呀
我建议你看下我的专栏文章《Redis高级用法》,里面介绍了用hash类型的好处
商品维度计数
对商品喜欢数,评论数,鉴定数,浏览数进行计数
说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc)
Redis的命令都是原子性的,你可以轻松地利用INCR,DECR等命令来计数。
采用Redis 的类型: Hash. 如果你对redis数据类型不太熟悉,可以参考
http://redis.io/topics/data-types-intro
为product定义个key product:,为每种数值定义hashkey, 譬如喜欢数like_num
用户维度计数
对用户动态数、关注数、粉丝数、喜欢商品数、发帖数等计数
用户维度计数同商品维度计数都采用 Hash. 为User定义个key 为 user:
为每种数值定义hashkey, 譬如关注数follow
存储社交关系
譬如将用戶的好友/粉丝/关注,可以存在一个sorted set中,score可以是timestamp
默认集合按照score递增排序
这样求两个人的共同好友的操作,可能就只需要用求交集命令即可
用作缓存代替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进行更全面分析统计)
用户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用作消息队列
采用Redis的List数据结构实现分布式的消息队列
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
redis在项目中的应用ps:PHP会自动关redis连接不需要手动关对于临时的数据可以不经过数据库直接redis上操作publicfunc
前言使用Redis来实现Session共享,其实网上已经有很多例子了,这是确保在集群部署中最典型的redis使用场景。在SpringBoot项目中,其实可以一行
本文实例讲述了redis+php实现微博发布与关注功能。分享给大家供大家参考,具体如下:数据结构:setpost:postid:3:timetimestamps
redis是一个基于内存的高性能key-value数据库,具有极高的读写速度。本文介绍SpringBoot和Redis的整合,以及如何在项目中具体应用配置文件属
本文实例讲述了redis+php实现微博列表功能。分享给大家供大家参考,具体如下:个人主页显示微博列表(自己及关注人的微博列表)/*获取最新的50微博信息列表,