String

这应该是应用最广泛的了,简单的 key-value 类型。value 不仅可以是 String,也可以是数字。还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模式),操作日志及 Replication 等功能。

Set

利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。Redis 非常人性化的为集合提供了求交集、并集、差集等操作。

Set 和 String 是在广告系统中使用最广泛的redis数据结构。

List

Hash

Sorted Set

和Sets相比,Sorted Sets是将 Set 中的元素增加了一个权重参数 score,使得集合中的元素能够按 score 进行有序排列,比如一个存储全班同学成绩的 Sorted Sets,其集合 value 可以是同学的学号,而 score 就可以是其考试得分,这样在数据插入集合的时候,就已经进行了天然的排序。

数据结构选型

一定要Set吗?

网上的文章讲到这里的时候都会说Redis的Set提供了一些方便的交集、并集、差集的操作。但是实际上我们在生产环境的时候不会用这些操作,数据库一般是系统压垮的最后一根稻草,如果数据库垮了,基本就是系统GG了。补救办法基本没有。所以,选型的时候能让服务器做的,就不会让数据库做,所以交集、并集、差集这些操作会放在服务器的内部逻辑去做。如果服务器撑不住,大不了就加机子嘛。

Set vs String

我们系统中,大多数时候是用key/value的结构。从某种意义上他们两个在逻辑上可以实现等价。

key -> "value1,value2,value3,value4"
key -> Set(value1,value2,value3,value4)

  

第一种我们直接用string,只不过value的获取完我们自己分割。用哪种还是看你们的业务场景。Set的缺点是比string占用更多的空间;优点是天然的是value之间是不会重复的。

  1. 我们线上系统用户已经安装的app是多个地方上报的,我们就用Set去存储,每次上报就直接更新就可以,如果这时候我们用的是String就不太适合,因为要读一次redis,做一次去重,再写入;

  2. 我们线上使用的已经曝光的广告不想让用户看到这个功能我们就用的是String,因为我们每次下发的广告已经从逻辑上保证了不是重复的.

最新文章

  1. Hibernate插入数据后获得ID
  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用
  3. 01 Linux入门介绍
  4. jQuery入门第三天
  5. MYSQL服务器字符集设置
  6. SIP中OPTIONS方法的用法及示例
  7. R语言的向量化编程思维
  8. 分析特定类的python脚本
  9. dataStructure@ Check whether a given graph is Bipartite or not
  10. [树结构]平衡二叉树AVL
  11. jsonp与cors跨域的一些理解(转)
  12. 可信执行环境(TEE)介绍
  13. Python内置函数(44)——len
  14. pytorch识别CIFAR10:训练ResNet-34(自定义transform,动态调整学习率,准确率提升到94.33%)
  15. web渗透学习方向
  16. odoo开发笔记 -- 表名_name长度限制
  17. vs 2017 community中文版下载地址
  18. 13.python错误和异常
  19. No module named HTMLTestRunner
  20. Eclipse频繁崩溃问题待解决

热门文章

  1. Github的初始设置
  2. springboot 解决Jackson导致Long型数据精度丢失问题
  3. GNU Makefile中的条件控制结构
  4. PIE截图方法的优化
  5. SpringIOC源码解析(下)
  6. react学习-react父组件给子组件传值与设置传值类型以及是否必传参数
  7. js获取客户端IP
  8. Date工具类
  9. c++指针全攻略
  10. SpringMVC中控制器接收JSP页面表单的参数接收方式详解及细节注意(400错误)