http.//papapa.mobi

说说交流_交流互动_淘气任务开发平台
当前身份:游客 [
& &&&&&&&& &
&&在线查看更多说说!
Maxcr*&&――Half-Marathon&Mom&Breastfeeds&While&Finishing&the&Race
myg14*&&――148网赚之家:【6年信誉名站,每日登录送500金币】
vikica*&&――秋雨连绵
sanjian06*&&――大家好啊,天气不错啊。
mhj12812*&&――灌灌灌灌灌
uu778*&&――今天来签到
LIBAOCU*&&――新的一周开始了
ricky62*&&――要下雪了
S*&&――vbghgghgh
linluyaozo*&&――很好的活动哦。
caoxiawe*&&――每日登录
caoxiawe*&&――每日登录
bnb12*&&――星期六上班去
xiaohuihu*&&――弹起我心爱的土琵琶
xiaohuihu*&&――弹起我心爱的土琵琶
wacai*&&――开心
b1963*&&――签到。
uyflj*&&――来了来了
S*&&――asfhg
xiao64a*&&――俯瞰美景在山巅
flor*&&――没事就拉放空警报
robin020*&&――OK
q2015052*&&――222
uu778*&&――今天来签到
ricky62*&&――下雨了啊
mm2016051*&&――天天支持一下
zy70*&&――快快签到!
z*&&――签到了
xixi*&&――怎么回事
xixi*&&――怎么回事
xixi*&&――怎么回事
mhj12812*&&――反反复复
rufeihon*&&――回家中心情好想你了
fhgfh*&&――我来了
devilyun*&&――开心心
shi17*&&――快乐天天
yj98091*&&――签到
hym88*&&――签到
hym88*&&――签到
y*&&――早上好啊
y*&&――早上好啊
y*&&――早上好啊
vikica*&&――连续阴雨
jingji12*&&――赚金币来来来
jingji12*&&――今天要多赚些金币啊
jingji12*&&――今天要多赚些金币啊
LIBAOCU*&&――假日开心唷
myg14*&&――148网赚之家:【6年信誉名站,每日登录送500金币】
Maxcr*&&――That's&great!
linluyaozo*&&――很好的活动哦。
wvqgogj*&&――我来了
wvqgogj*&&――我来了
b1963*&&――签到。
b1963*&&――签到。
caoxiawe*&&――每日登录
caoxiawe*&&――每日登录
linluyaozo*&&――很好的活动哦。
robin020*&&――OK
robin020*&&――OK
fyyg*&&――下跌下跌
fyyg*&&――下跌下跌
xixi*&&――烦啊,不开森
uyflj*&&――来了来了
z*&&――下午好
xiao64a*&&――挖啦挖啦
mm2016051*&&――我怎敢落后,且待我抖一抖小手
bnb12*&&――中秋节后快乐
ricky62*&&――哈哈啊
lbl12*&&――ok
lbl12*&&――ok
lbl12*&&――ok
lbl12*&&――ok
lbl12*&&――ok
lbl12*&&――ok
hym88*&&――早
hym88*&&――早
devilyun*&&――开心心
chwela8*&&――天天来看看,做做任务。
xiaohuihu*&&――123
somelo*&&――淘气不错的
jingji12*&&――今天要多赚些金币才行
vikica*&&――早晨天阴
y*&&――早上好啊
y*&&――早上好啊
uu778*&&――今天来签到
LIBAOCU*&&――中秋快乐唷
S*&&――vbghgghgh
Maxcr*&&――The&weather&starts&to&become&cold.
zy70*&&――签到了!
zy70*&&――签到了!
caoxiawe*&&――每日登录
chwela8*&&――天天来看看,做做任务了。
b1963*&&――签到。
z*&&――节日快乐
bnb12*&&――每天一说10金币
xiao64a*&&――下雨了,中秋无法赏月
uyflj*&&――来了来了
hym88*&&――签到
copyspaide*&&――网站还不错
mhj12812*&&――古古怪怪
mm2016051*&&――楼上的等我呀,我也来个了。
robin020*&&――OK
ricky62*&&――哈哈啊
zy70*&&――我签到
wen19*&&――每天一说10金币奖
wacai*&&――假日
uu778*&&――今天来签到
vikica*&&――昨晚突然下雨
y*&&――早上好啊
y*&&――早上好啊
LIBAOCU*&&――中秋快乐
sueru*&&――/?suerue
Maxcr*&&――Have&a&weekend&!
jingji12*&&――今天可以多赚点金币来
caoxiawe*&&――每日登录
b1963*&&――签到。
b1963*&&――签到。
bnb12*&&――每天一说10金币奖
chwela8*&&――天天来看看,做做任务。
mm2016051*&&――天天感觉有点小幸福
wacai*&&――加油
gg33*&&――天天赚点
uyflj*&&――来了来了
wpq195*&&――今天雨好大哦
wen19*&&――每天一说10金币
z*&&――签到了
wb_7*&&――人人投,注册奖励1.元,真的吗?是的。
zhunlongs*&&――明天就放假了
ricky62*&&――方阿萨德
robin020*&&――OK
xiao64a*&&――有钱大家赚
xiao64a*&&――有钱大家赚
swallow1*&&――钱
bzj196*&&――开心报道阿
hym88*&&――早
LIBAOCU*&&――中秋快乐
devilyun*&&――开心心
S*&&――asfhg
xiaohuihu*&&――120
y*&&――早上红啊a
mhj12812*&&――啦啦啦啦啦
ljg6771*&&――下雨了,还不小,秋水绵绵
vikica*&&――早起早干活
myg14*&&――148网赚之家:【6年信誉名站,每日登录送500金币】
uu778*&&――今天来签到
jingji12*&&――今天要多赚些金币
sanjian06*&&――大家好,大家都发大财啊
zy70*&&――快点!签到!
zy70*&&――快点!签到!
Maxcr*&&――Have&a&weekend&!
caoxiawe*&&――每日登录
bnb12*&&――说点什么h
wacai*&&――方法
b1963*&&――签到。
uyflj*&&――来了来了
wb_7*&&――推广、试玩,浏览赚钱方式多多,值得一玩。
wb_7*&&――推广、试玩,浏览赚钱方式多多,值得一玩。
mm2016051*&&――天天支持一下
bzj196*&&――规划就回家回家
shi17*&&――快乐天天
zy70*&&――签到!
zy70*&&――签到!
zy70*&&――签到!
chwela8*&&――天天来看看,做做任务。
z*&&――签到了
zhunlongs*&&――我来了
xiao64a*&&――中秋节快到了,真开心啊
ricky62*&&――呵呵结束了
swallow1*&&――钱
robin020*&&――OK
robin020*&&――OK
devilyun*&&――开心心
LIBAOCU*&&――中秋快乐
wen19*&&――每天一说10金币奖
jingji12*&&――今天要多赚些金币哦
hym88*&&――早
xiaohuihu*&&――验证
sanjian06*&&――大家好啊,天气不错啊。
mhj12812*&&――换个房合法化
vikica*&&――阴天,凉快
y*&&――早上好啊
y*&&――早上好啊
uu778*&&――今天来签到
uu778*&&――今天来签到
ljg6771*&&――心情图片并写下今天最想说的话!
ljg6771*&&――心情图片并写下今天最想说的话!
S*&&――asfhg
Maxcr*&&――Have&a&weekend&!
b1963*&&――签到。
bnb12*&&――每天一说10金币奖
robin020*&&――OK
caoxiawe*&&――每日登录
fhgfh*&&――呵呵呵呵
wb_7*&&――推广、试玩,浏览赚钱方式多多,值得一玩。
wvqgogj*&&――我来了
wvqgogj*&&――我来了
wvqgogj*&&――我来了
bzj196*&&――相关法规和规划规划
bzj196*&&――相关法规和规划规划
共48449条记录, 共243页
说说功能为大家提供良好的交流平台,欢迎大家一起交流分享,一起努力,共同发展!有你们的支持就有淘气的明天。<
CopyRight &
Powered By
&a href="" data-ke-src=""& &img src="/cgi-bin/connect.cgi?usr=Pauto" data-ke-src="/cgi-bin/connect.cgi?usr=Pauto" border="0" alt="AddFreeStats" /&website statistics&/a&中国领先的IT技术网站
51CTO旗下网站
【PaPaPa】实现缓存决策:让你的缓存变的有智慧
本来这一篇我打算放到后面再说,可是之前泄漏了一点关于缓存决策的代码后被好多人催更了。在此感谢大家的支持,让我更有动力的写这个系列。你们的关注让我觉得我的决定是对的,我会坚持下去把这个项目做完。
作者:寻找和谐来源:寻找和谐的博客| 10:03
本来这一篇我打算放到后面再说,可是之前泄漏了一点关于缓存决策的代码后被好多人催更了。
在此感谢大家的支持,让我更有动力的写这个系列。你们的关注让我觉得我的决定是对的,我会坚持下去把这个项目做完。
另外非常感谢老虎,在百忙之中给我们赶出需求文档,当我们在享受周末的时候他还在公司加班,即便这样,他依然为我们的开源项目奉献着。
此时我不知道该说些什么,只能以我的行动来回报大家,废话不多说了,入正题。
先澄清下,这个名字是我杜撰的,因为我觉得在我的项目中它起到了这样的作用。
缓存:在我做的这个功能中涉及到内存和redis两部分的缓存。
决策:我从百度找的翻译,指做出决定或选择,是一种&在各种替代方案中考虑各项因素作出选择&的认知、思考过程。
那么缓存决策到底是干什么的?
说白了就是选择使用数据库还是缓存。
如何适合缓存决策
缓存决策的由来 - 我是懒人
因为我懒,所以我要想办法偷懒。
我希望有一个类库可以帮助我来判断当前的数据是到缓存里取,还是数据库里取。
而为了实现这样的一个功能,我觉得我应该建立一个规则,这个规则来帮助我判断当前数据在缓存里是不是有一份拷贝。
我对缓存的判断规则有什么要求?
就以目前项目来说,我缓存是整表缓存的,所以我需要判断的是当前数据是属于哪个表。
既然如此,那我判断的依据应该是这样: 缓存决策规则.表名列表.包含(数据.表名) == true
只要满足上面的条件,说明当前数据在缓存里是有拷贝的。
如何管理这些判断规则?
继续上面提到的包含,我们再分析一下,包含的判断依据其实是逐一比对相等,所以我想了个类名:EqualsMonitorManager,这里的Monitor是监视器的意思,后面的类都会跟这个词有关。
这个类有4个基本的方法:Add、Remove、Get、IsMonitoring ,看起来其实是很像字典的对吧?其实内部实现确实依赖了字典,对字典做了一些封装。
为了方面以后扩展支持到更多场景而不局限于缓存,我定义的时候使用到了泛型。
public&static&partial&class&EqualsMonitorManager&TKey,&TValue& &&&&&&&&&where&TValue&:&IEquatable&TValue& &&&&&{ &&&&&&&&&private&static&class&MonitorCaller&TCallerKey& &&&&&&&&&{ &&&&&&&&&&&&&public&static&Action&TCallerKey,&TValue&&A &&&&&&&&&&&&&&public&static&Action&TCallerKey&&R &&&&&&&&&&&&&&public&static&Func&TCallerKey,&Func&TValue,&bool&,&TValue&&G &&&&&&&&&&&&&&public&static&Func&TCallerKey,&TValue,&bool&&IsM &&&&&&&&&} &&&&&&&&&&#region&Members &&&&&&&&&&private&static&Dictionary&string,&List&TValue&&&_dicStringMonitor&=&new&Dictionary&string,&List&TValue&&(); &&&&&&&&&&#endregion &&&&&&&&&&static&EqualsMonitorManager() &&&&&&&&&{ &&&&&&&&&&&&&StringMonitorCallerInit(); &&&&&&&&&} &&&&&&&&&&private&static&void&StringMonitorCallerInit() &&&&&&&&&{ &&&&&&&&&&&&&MonitorCaller&string&.Add&=&(string&key,&TValue&value)&=& &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&if&(!_dicStringMonitor.ContainsKey(key)) &&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&_dicStringMonitor.Add(key,&new&List&TValue&()); &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&&_dicStringMonitor[key].Add(value); &&&&&&&&&&&&&}; &&&&&&&&&&&&&&MonitorCaller&string&.Remove&=&(string&key)&=& &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&if&(_dicStringMonitor.ContainsKey(key)) &&&&&&&&&&&&&&&&&&&&&_dicStringMonitor.Remove(key); &&&&&&&&&&&&&}; &&&&&&&&&&&&&&MonitorCaller&string&.Get&=&(string&key,&Func&TValue,&bool&&predicate)&=& &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&if&(_dicStringMonitor.ContainsKey(key)) &&&&&&&&&&&&&&&&&&&&&return&_dicStringMonitor[key].FirstOrDefault(predicate); &&&&&&&&&&&&&&&&&else&&&&&&&&&&&&&&&&&&&&&return&default(TValue); &&&&&&&&&&&&&}; &&&&&&&&&&&&&&MonitorCaller&string&.IsMonitoring&=&(string&key,&TValue&value)&=& &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&if&(!_dicStringMonitor.ContainsKey(key)) &&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&return&false; &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&&return&_dicStringMonitor[key].Exists(x&=&&x.Equals(value)); &&&&&&&&&&&&&}; &&&&&&&&&} &&&&&}&
public&static&partial&class&EqualsMonitorManager&TKey,&TValue& &&&&&{ &&&&&&&&&public&static&void&Add(TKey&key,&TValue&value) &&&&&&&&&{ &&&&&&&&&&&&&if&(key&==&null) &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&throw&new&ArgumentNullException(); &&&&&&&&&&&&&} &&&&&&&&&&&&&MonitorCaller&TKey&.Add(key,&value); &&&&&&&&&} &&&&&&&&&&public&static&void&Remove(TKey&key) &&&&&&&&&{ &&&&&&&&&&&&&if&(key&==&null) &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&throw&new&ArgumentNullException(); &&&&&&&&&&&&&} &&&&&&&&&&&&&MonitorCaller&TKey&.Remove(key); &&&&&&&&&} &&&&&&&&&&public&static&TValue&Get(TKey&key,&Func&TValue,&bool&&predicate) &&&&&&&&&{ &&&&&&&&&&&&&if&(key&==&null) &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&throw&new&ArgumentNullException(); &&&&&&&&&&&&&} &&&&&&&&&&&&&return&MonitorCaller&TKey&.Get(key,&predicate); &&&&&&&&&} &&&&&&&&&&public&static&bool&IsMonitoring(TKey&key,&TValue&value) &&&&&&&&&{ &&&&&&&&&&&&&if&(key&==&null) &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&throw&new&ArgumentNullException(); &&&&&&&&&&&&&} &&&&&&&&&&&&&&return&MonitorCaller&TKey&.IsMonitoring(key,&value); &&&&&&&&&} &&&&&}&
这里的代码用到了老赵博客中的一篇关于&逆泛型&的代码,这里是未经优化的,写的仓促。
这里我就不多解释为什么会这么写这个类了,有兴趣可以去翻老赵的博客,写的很详细,对于初学者来说这里有点绕,建议可以去看看。
这里只是创建了一个最基础的封装过的&字典&,用于管理判断规则。
初始化判断规则
有了管理规则的类,那么我们的项目中首先要做的就是初始化这些规则,否则没有规则后面的写下去也用不了。
细心的朋友可能会发现,EqualsMonitorManager的TValue需要继承自IEquatable接口,因为内部判断相等是用了这个接口的Equals方法。
那么,我们第一个缓存决策类出现了,它就是RedisCacheMonitor。
public&class&RedisCacheMonitor&:&IEquatable&RedisCacheMonitor& &&&&&{ &&&&&&&&&public&string&Key&{&get&{&return&MonitorConstant.REDIS_KEY;&}&} &&&&&&&&&&public&string&TableName&{&&&} &&&&&&&&&&public&string[]&Fields&{&&&} &&&&&&&&&&#region&IEquatable&RedisCacheMonitor&&成员 &&&&&&&&&&public&bool&Equals(RedisCacheMonitor&other) &&&&&&&&&{ &&&&&&&&&&&&&if&(other&==&null) &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&return&false; &&&&&&&&&&&&&} &&&&&&&&&&&&&&return&this.TableName&==&other.TableN &&&&&&&&&} &&&&&&&&&&#endregion &&&&&}&
我们可以发现,这个类的自由度很大,唯一的约束就是要实现IEquatable接口,这样EqualMonitorManager的可扩展性就充分被利用了起来。
而RedisCacheMonitor就可以任由我们来发挥,我们只需要告诉EqualMonitorManager如何去判断相等即可。
TableName表示缓存的表名,Fields是使用了Redis HGet命令的一个参数名,表示哪些字段可以作为关键字来查询数据或者说需要缓存哪些字段为关键字。
接下来就是如何把一个RedisCacheMonitor加入到EqualMonitorManager
var&monitor&=&new&RedisCacheMonitor()&{&TableName&=&&User&,&Fields&=&new&string[]&{&&Id&,&&UserName&&}&}; &EqualsMonitorManager&string,&RedisCacheMonitor&.Add(monitor.Key,&monitor);&
是的,就这么简单,我们的缓存规则就加完了。剩下就是操作Redis,把User表缓存起来我就不多说了。
自动缓存决策与手动缓存决策
为什么会有自动和手动两种?
因为我操作数据库用的EF,查询条件是表达式树,为了降低解析表达式树的工作量暂时选择了自动和手动。
如何实现手动缓存决策?
var&monitor&=&EqualsMonitorManager&string,&RedisCacheMonitor&.Get(MonitorConstant.REDIS_KEY,&x&=&&x.TableName&==&tableName); &&if&(monitor&!=&null) &{ &&&&&&} &
手动决策很简单,只要尝试获取一下即可,获取到monitor就说明被缓存了,下面就可以直接取缓存了。
如何实现自动缓存决策?
看到第一篇的应该对下面的代码有印象,我把之前写的内容直接copy过来一份:
SaveChangesAsync是EF的异步保存方法,我们要做的事情其实很简单,就是拦截保存方法,代码中是SaveAsync,这个是我们自己针对EF封装后的方法。
大概思路是这样的:
想要让 SaveAsync 听我们的话, override 就派上了用场,重写 SaveAsync。
调用基类的 SaveAsync 后,再加上保存到Redis的代码。
这样一个SaveAsync就变成了做2件事,先保存到数据库再保存到Redis,从而杜绝了代码中到处写保存到Redis的重复代码。
public&class&DataWrapper&T&&:&EFWrapperBase&T& &&&&&&&&&where&T&:&class,new() &&&&&{ &&&&&&&&&public&DataWrapper() &&&&&&&&&{ &&&&&&&&&&&&&base.Context.EventRegistModel&+=&ModelRegister.R &&&&&&&&&} &&&&&&&&&&public&override&async&Task&int&&SaveAsync() &&&&&&&&&{ &&&&&&&&&&&&&var&result&=&await&base.SaveAsync(); &&&&&&&&&&&&&&SaveToRedis(); &&&&&&&&&&&&&&return& &&&&&&&&&} &&&&&&&&&&private&void&SaveToRedis() &&&&&&&&&{ &&&&&&&&&&&&&try&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&var&type&=&typeof(T); &&&&&&&&&&&&&&&&&var&monitor&=&EqualsMonitorManager&string,&RedisCacheMonitor&.Get(MonitorConstant.REDIS_KEY,&x&=&&x.TableName&==&type.Name); &&&&&&&&&&&&&&&&&if&(monitor&!=&null) &&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&foreach&(var&entity&in&base.DbSet.Local) &&&&&&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&&&&&foreach&(var&field&in&monitor.Fields) &&&&&&&&&&&&&&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&&&&&&&&&&&&&var&pi&=&type.GetProperty(field); &&&&&&&&&&&&&&&&&&&&&&&&&&&&&RedisSingleton.GetInstance.Client.HSet(type.Name,&string.Format(&{0}:{1}&,&pi.Name,&pi.GetValue(entity,&null).ToString()),&entity); &&&&&&&&&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&&} &&&&&&&&&&&&&} &&&&&&&&&&&&&catch&(Exception&ex) &&&&&&&&&&&&&{ &&&&&&&&&&&&&&&&&Logger.Error(ex.ToString()); &&&&&&&&&&&&&} &&&&&&&&&} &&&&&&}&
源码地址:http://git.oschina.net/doddgu/PaPaPa
PS:其实想想真的不难,主要是一种思路,用到的都是基本的C#语法,关键在于你敢不敢想,而我敢想了,你还在犹豫吗?后面我们会有更多敢想敢做的事,欢迎你的加入。
原文出自:【编辑推荐】【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点热点热点热点热点
24H热文一周话题本月最赞
讲师:22人学习过
讲师:7人学习过
讲师:12人学习过
精选博文论坛热帖下载排行
本书结合JSP和Servlet的最新规范,从基本的语法和规范入手,以经验为后盾,以实用为目标,以实例为导向,以实践为指导,深入浅出地讲解了JS...
订阅51CTO邮刊当前所在位置: >
热门微信号:
论岛国爱情动作片和真实生活啪啪啪的区别!已深受教育!
作者: 浏览数:0 用手机扫描二维码
阅读,只需一秒。精彩,尽在掌握!论爱情动作片和真实生活啪啪啪的区别! 已深受教育!
论爱情动作片和真实生活啪啪啪的区别! 已深受教育!
手机版地址:
微信号:siyangrcw
泗阳人才网提供泗阳地区企业和个人最佳的网络招聘平台
TA的热门文章
推荐其它微信帐号
热门文章排行
(), All rights reserved 京ICP备号-12平板/笔记本
给各位撸友贡献一个软件,非常好用!
&略有小成&
来自:浏览器
http://papapa.mobi&&下载APP& &然后输入邀请码就可以使用了。邀请码 74271& & 在线观看的。
width:100%">
&略有小成&
来自:浏览器
width:100%">
&独步江湖&
来自:浏览器
width:100%">
&独步江湖&
来自:浏览器
这个真的不是病毒吗
width:100%">
&自成一派&
来自:浏览器
诱惑我们刷点吗,不上当,闪
width:100%">
&炉火纯青&
来自:浏览器
路过,看看
width:100%">
&渐入佳境&
来自:浏览器
祝愿华为越来越好
width:100%">
&略有小成&
来自:浏览器
huafans 发表于
这个真的不是病毒吗
不是啊!是一个APP我都下载了,才给你们分享的
width:100%">
&登堂入室&
来自:浏览器
是什么ApP,下来看看。
width:100%">
&登堂入室&
来自:浏览器
这是什么东东?
width:100%">
1000万花粉
纪念花粉俱乐部注册花粉数超过1000万
【大美草原】【天高云淡】【南园印象】【沧桑变换】【蓝调樟脚】【秋水如镜】
花粉客户端
Make it Possible
Make your device special
华为云服务
Huawei cloud services
音乐播放器
Huawei Music
Huawei Vmall
没有最新动态
关注花粉俱乐部
联系我们:
|关注花粉俱乐部:
Copyright (C)
华为软件技术有限公司 版权所有 保留一切权利当前所在位置: >
热门微信号:
终于和白富美开心的啪啪啪了~~
作者: 浏览数:0 用手机扫描二维码
阅读,只需一秒。精彩,尽在掌握!一个搬运工屌丝看上了白富美,却遭到了冷眼!他去买了件名牌风衣,租了辆宝马X5,一顿晚餐后,终于和白富美开心的啪啪啪~~~~...
最全手机背景图 微信号:sjbjtu为您提供最全手机壁纸,包括风景、美女、动漫、非主流、卡通、安卓、苹果等精美好看的手机壁纸下载;iPhone、三星、SONY、HTC、其他品牌热门机型一个搬运工屌丝看上了白富美,却遭到了冷眼!他去买了件名牌风衣,租了辆宝马X5,一顿晚餐后,终于和白富美开心的啪啪啪~~~~最后碉堡了!!这就是现实!!!!震撼到你了么?
手机版地址:
微信号:sjbjtu
本手机壁纸站,小编为您免费提供最新最全的高清手机壁纸鉴赏下载;包括风景、美女、动漫、非主流、卡通、安卓、苹果等精美好看的手机壁纸下载;iPhone、三星、SONY、HTC、其他品牌热门机型;更全的壁纸尺寸;供...
TA的热门文章
推荐手机微信帐号
热门文章排行
(), All rights reserved 京ICP备号-12}

我要回帖

更多关于 百度云资源分享 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信