解读Retwis官网例子

Redis需要考虑需要哪些keys以及对应的value使用合适的数据类型进行存储。在retwis例子中,我们需要users,user的粉丝列表, user的关注用户列表等等。

Users

和传统的关系型数据库一样,每个用户有一个唯一的id关联,使用INCR创建唯一的id。

除了这些值以外,有时候我们希望根据用户名找到用户的id,所以每增加一个用户信息,我们需要存用户的id。因为redis没法根据值来查询key。
HSET和HMSET的区别就是,HMSET允许设置多个field/value。

Followers(粉丝), Following(关注), Updates(更新)

用户的粉丝和关注都使用Sets集合存储,因为需要是唯一的集合,并且可以使用Sorted sets有序集合存储,这样可以根据关注或被关注的时间进行排序。

接下来先再添加一个用户

用户2关注用户1

用户1增加一个粉丝

通过ZRANGE命令查询所有的关注对象
ZRANGE key start stop
stop为-1表示查到集合中倒数第一个数,-2查到倒数第二个数,以此类推。

接下来使用List来存储用户的更新,并且按照更新的时间倒序,以及使用LRANGE来进行翻页查询。




为了避免将session存在应用服务里,因为应用服务可以部署在不同的机器上,所以可以将session放在redis里,持久存储。
如果用户认证成功,需要将生成的session添加到用户hash结构里。同时,如果我们需要根据session得到用户id。

这样就基本上能满足twitter-clone例子中的数据存储

最新文章

  1. RTABMAP-ROS RGB-D的建图原理
  2. Android --Spinner--自定义Spinner
  3. 如何在windows上搭建ftp服务器
  4. java改变图片文件尺寸
  5. cgroup原理简析:vfs文件系统
  6. Java笔记:Java 流(Stream)、文件(File)和IO
  7. 刚发现 CSS 还存在一个命名规范 B.E.M
  8. git branch & checkout fetch 的使用和冲突解决
  9. GoldenGate实时投递数据到大数据平台(2)- Cassandra
  10. Spring技术内幕总结 - IoC容器的实现
  11. Ubuntu 14.04 LTS 安装Docker(转)
  12. box-sizing border-box 的理解
  13. BZOJ.5068.友好的生物(思路)
  14. Python 3.x标准模块库目录
  15. Executors类的newFixedThreadPool, newCachedThreadPool, newScheduledThreadPool
  16. 【WPF】UserControl 的 Load事件
  17. week1:个人博客作业
  18. css声明的优先级
  19. mysql 导入导出数据库、数据表的方法
  20. 08_MySQL DQL_SQL99标准中的多表查询(内连接)

热门文章

  1. 检查 NaN 数据值 (C/C++/Python 实现)
  2. php 3des加密 兼容JAVA 多么痛的领悟呀
  3. 贪心算法和动态规划[zz]
  4. 使用RQShineLabel
  5. FTP自动上传
  6. Gdb调试工具/ Makfile项目管理
  7. Handlebars.js中集合(list)通过中括号的方式取值
  8. HDU 1542 矩形面积并
  9. day13 多线程建立方法
  10. CATransaction:原子化操作、批量操作、整体设置、自动添加