赞
踩
出现的问题:
罪魁祸首——关系型数据库:
解决思路
NoSQL:
即Not-OnlySQL(泛指非关系型的数据库),作为关系型数据库的补充。
作用:
应用对于海量用户和海量数据前提吓得数据处理问题。
特征:
常见Nosql数据库:
概念:
Redis(REmote DIctinary Server)是用C语言开发的一个开源的高性能键值对(key-value)数据库
特征:
命令行模式工具使用思考
信息添加
set key value
set name itheima
信息查询
get key
get name
清除屏幕信息
clear
帮助命令
help 命令名称
help @组名
退出客户端命令行模式
quit
exit
<ESC>(慎用)
123
作为缓存使用
附加功能
系统功能优化或升级
redis 数据存储格式
String 类型数据的基本操作
set key value
get key
del key
mset key1 valueq key2 value2 …
mget key1 key2 …
strlen key
append key value
业务场景
大型企业级应用中,分表操作是基本操作,使用多张表存储同类型数据,但是对应的主键id必须保证统一性,不能重复。Oracle数据库具有sequence设定,可以解决该问题,但是MySQL数据库并不具有类似的机制,那么如何解决?
解决方案
incr key
incrby key increment
incrbyfloat key increment
decr key
decrby key increment
String作为数值操作
业务场景
场景一:“最强女生”,启动海选投票,只能通过微信投票,每个微信号每4个小时只能投1票。
场景二:电商商家开启热门商品推荐,热门商品不能一直处于热门期,每种商品热门期维持3天,3天后自动取消热门
场景三:新闻网站会出现热点新闻,热点新闻最大的特征是对时效性,如何自动控制热点新闻的时效性
解决方案
setex key seconds value
psetex key milliseconds value
Tips 2:
业务场景
主页高频访问信息显示控制,例如新浪微博大V主页显示粉丝数与微博数量
存储的困惑
对象类数据的存储如果具有较为频繁的更新需求操作会显得笨重
hash类型
hset key field value
hget key field
hgetall key
hdel key field1 [field2]
hmset key field1 value1 field2 calue2
hmget key field1 field2 …
hlen key
hexists key field
hkeys key
hvals key
hincrby key field increment
hincrbyfloat key field increment
当前设计是否加速了购物车的呈现
当前仅仅是将数据存储到redis中,并没有起到加速的所用,商品信息还需要二次查询数据库
hsetnx key field value
Hash应用场景
解决方案
业务场景
string存储对象(json)与hash存储对象
lpush key value1 [value2] …
rpush key value1 [value2] …
lrange key start stop
lindex key index
llen key
lpop key
rpop key
list 类型数组扩展操作
blpop key1 [key2] timeout
brpop key1 [key2] timeout
阻塞式获取,获取值如果还没有的时候可以等,如果有值就可以获取到。
微信朋友圈点赞,要求按照点赞顺序显示点赞好友信息,如果取消点赞,移除对应好友信息
lrem key count value
业务场景
解决方案
sadd key menber1 [member2]
smembers key
srem key member1 [member2]
scard key
sismember key member
业务场景
每位用户首次使用进入头条时候会设置3项爱好的内容,但是后期为了增加用户的活跃度,兴趣点,必须让用户对其他信息类别逐渐产生兴趣,增加客户留存度,如何实现?
业务分析
srandmember key [count]
spop key
业务场景
脉脉为了促进用户间的交流,保障业务成单率的提升,需要让每位用户拥有大量的好友,事实上职场新人不具有更多的职场好友,如何快速为用户积累更多的好友?
新浪微博为了增加用户热度,提高用户留存性,需要微博用户在关注更多的人,以此获得更多的信息或热门话题,如何提高用户关注他人的总量?
QQ新用户入网年龄越来越低,这些用户的朋友圈交际圈非常小,往往集中在一所学校甚至一个班级中,如何帮助用户快速积累好友用户带来更多的活跃度?
微信公众号是微信信息流通的渠道之一,增加用户关注的公众号成为提高用户活跃度的一种方式,如何帮助用户积累更多关注的公众号?
美团外卖为了提升成单量,必须帮助用户挖掘美食需求,如何推荐给用户最适合自己的美食?
解决方案
sinter key1 [key2]
sunion key1 [key2]
sdiff key1 [key2]
sinterstore destination key1 [key2]
sunionstore destination key1 [key2]
sdiffstore destination key1 [key2]
smove source destination member
业务场景
解决方案
校验工作:redis提供基础数据还是提供校验结果
Tips 10:
业务场景
解决方案
业务场景(黑白名单)
资讯类信息类网站追求高访问量,但是由于其信息的价值,往往容易被不法分子利用,通过爬虫技术,快速获取信息,个别特种行业网站信息通过爬虫获取分析后,可以转换成商业机密进行出售。例如第三方火车票、机票、酒店刷票代购软件,电商刷评论、刷好评。
同时爬虫带来的伪流量也会给经营者带来错觉,产生错误的决策,有效避免网站被爬虫反复爬取成为每个网站都要考虑的基本问题。在基于技术层面区分出爬虫用户后,需要将此类用户进行有效的屏蔽,这就是黑名单的典型应用。
ps:不是说爬虫一定做摧毁性的工作,有些小型网站需要爬虫为其带来一些流量。
白名单
对于安全性更高的应用访问,仅仅靠黑名单是不能解决安全问题的,此时需要设定可访问的用户群体,依赖白名单做更为苛刻的访问验证。
解决方案
Tips 12:
zadd key score1 member1 [score2 member2]
zrange key start stop [WITHSCORES]
zrevrange key start stop [WITHSCORES]
zrem key member [member …]
zrangebyscore key min max [WITHSCORES] [LIMIT]
zrevrangebyscore key max min [WITHSCORES]
zremrangebyrank key start stop
zremrangebyscore key min max
注意:
zcard key
zcount key min max
zinterstore destination numkeys key [key …]
zunionstore destination numkeys key [key …]
业务场景
解决方案
zrank key member
zrevrank key member
zscore key member
zincrby key increment member
Tips 13:
业务场景
解决方案
time
Tips 14:
业务场景任务/消息权重设定应用
当任务或者消息待处理,形成了任务队列或消息队列时,对于高优先级的任务要保障对其优先处理,如何实现任务权重管理。
解决方案
如果权重条件过多时,需要对排序score值进行处理,保障score值能够兼容2条件或者多条件,例如外贸订单优先于国内订单,总裁订单优先于员工订单,经理订单优先于员工订单
Tips 15:
redis应用于即时任务/消息队列执行管理
Tip16:
限时按次结算的服务控制
Tip17:
基于时间顺序的数据操作,而不关注具体时间
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。