当前位置:嗨网首页>书籍在线阅读

02-事务

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.1 事务

标题 :使用Redis来存储微博中的用户关系 正文 :在微博中,用户之间是“关注”和“被关注”的关系。如果要使用Redis存储这样的关系可以使用集合类型。思路是对每个用户使用两个集合类型键,分别名为 “ user:用户 ID :followers ”“ user:用户 ID :following ” ,用来存储关注该用户的用户集合和该用户关注的用户集合。 如ID为1的用户A想关注ID为2的用户B,只需要执行 follow(1, 2) 即可。然而在实现该功能的时候我发现了一个问题:完成关注操作需要依次执行两条Redis命令,如果在第一条命令执行完后因为某种原因导致第二条命令没有执行,就会出现一个奇怪的现象:A查看自己关注的用户列表时会发现其中有B,而B查看关注自己的用户列表时却没有A,换句话说就是,A虽然关注了B,却不是B的“粉丝”。真糟糕,A和B都会对这个网站失望的!但愿不会出现这种情况。

傍晚时候,忙完了一天的教学工作,宋老师坐在办公室的电脑前开始为明天的课程做准备。尽管有着近5年的教学经验,可是宋老师依然习惯在备课时写一份简单的教案。正在网上查找资料时,在浏览器的历史记录里他突然看到了小白的博客。心想:不知道他的博客怎么样了?

于是宋老师点进了小白的博客,页面刚载入完他就被博客最下面的一行大得夸张的文字吸引了:“Powered by Redis”。宋老师笑了笑,接着就看到了小白博客中最新的一篇文章:

def follow($currentUser, $targetUser)
  SADD user:$currentUser:following, $targetUser
  SADD user:$targetUser:followers, $currentUser

宋老师看到此处,笑得合不拢嘴,把备课的事抛到了脑后。心想:“看来有必要给小白传授一些进阶的知识。”他给小白写了封电子邮件:

其实可以使用Redis的事务来解决这一问题。