Redis 可以用来做数据库吗

https://www.zhihu.com/question/19660689

很久以前的问题了,Redis 又发展了两三年,数据结构更丰富了,使用场景增多,Redis 3.0支持集群(cluster)模式。 

是否可以用来作为数据库,还是看业务,架构是技术对业务妥协的结果!  

Redis在新浪微博有很多应用,主要是用来存关注关系。

新浪微博大多数的数据还是落地到mysql的,按照那边DB组同学说法,mysql在新浪只用来存储数据,Redis是用来抗量的。没有全用Redis,是基于历史原因、可靠性和成本考虑的。 

百度的LBS也大量的使用Redis,很多信息都交给Redis来存储,不过同样也是对Redis进行了定制和扩展——增加了数据切分、服务监控、自动扩容等。  按照业务来看,核心业务建议数据还是落地到mysql,redis在异常情况下回丢数据。

 非核心业务,比如运营推广,数据聚合统计这种允许数据少量丢失的业务可以全用redis,扩展方便,效率高,业务量也不大。特别是运营推广这种时效性很强的业务,在推广结束后数据接没用了,Redis内存压力也不会很大。  

按照发展阶段来看。 产品初期,业务需求多变,数据量很小,数据结构朝令夕改,这时候如果用mysql很有可能会在改数据库结构上疲于奔命,如果用Redis,由于没有Scheme约束,数据结构的变更相对容易,比起mysql能轻松不少。 

产品中期,业务需求逐渐稳定,可以将核心数据导到mysql中落地,其余数据仍然放在Redis中。 

产品后期,业务需求基本稳定,数据应该尽量都落地到mysql,Redis做高速缓存,或者先写到Redis,再异步刷到mysql。 

 按照对数据的需求来看 mysql能支持对各个字段的查询,Redis的查询仅限于对key的简单匹配,如果要对value进行复杂查询,不适合用Redis。Redis新增了计数器、bitmaps以及地理位置索引的支持,特别是地理位置索引,可以方便的做附近搜索,有需求的话可以考虑。

redis是目前公认的速度最快的基于内存的键值对数据库,但redis的缺点也非常明显,仅提供最基本的hash set, list, sorted set等基于数据类型,不分表,没有schema,没有索引,没有外键,缺少int/date等基本数据类型,多条件查询需要通过集合内联(sinter,zinterstore)和连接间接实现,操作不便,开发效率低,可维护性不佳;因此一般不将其视为完整的数据库单独使用,很多网站将redis作为高速缓存和session状态存储层,然后再与其他数据库搭配使用。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,Redis 可以通过使用哈希表或集合来实现 join 操作。 如果您想要在 Redis 中进行 join 操作,可以使用哈希表或集合来存储关系数据。例如,假设您有一张用户表和一张订单表,您可以使用哈希表来存储用户信息,并使用集合来存储每个用户的订单。然后,可以使用 Redis 的集合操作(例如 SINTER 命令)来执行 join 操作。 此外,Redis 还提供了 RedisGraph 插件,它是一个基于图形数据库Redis 插件,可以用来执行复杂的 join 操作。 总的来说,Redis 是一个高性能的内存数据库,可以通过多种方式来实现 join 操作。 ### 回答2: Redis是一个基于内存的键值型数据库,它主要用于高速读取、写入和存储数据。与传统的关系型数据库不同,Redis并不直接支持传统的SQL语法和关系型数据模型,因此在Redis中无法像关系型数据库那样直接使用JOIN操作。 然而,虽然Redis中没有内置的JOIN操作,但可以通过不同的方式间接模拟实现类似的功能。 一种常见的方法是使用应用程序在从Redis中检索数据之后进行数据整合和关联操作。例如,如果我们有两个Redis哈希表,每个表都包含不同的字段和数据,我们可以在应用程序中将它们获取并进行关联,实现JOIN操作的效果。这种方法需要在应用程序层面上实现逻辑和算法。 另一种方法是使用Redis的Sorted Set或者Hash数据结构,它们提供一些集合操作来执行交集、并集、差集等操作。通过使用这些集合操作,我们可以在Redis中模拟某种程度上的JOIN操作。 需要注意的是,虽然Redis可以通过以上方式间接模拟实现JOIN操作,但由于Redis的主要设计目标是快速读写和存储大量数据,而不是支持复杂的查询操作,所以在一些情况下使用Redis来进行JOIN操作可能不是最佳的选择。对于需要执行大量JOIN操作的复杂查询,传统的关系型数据库可能更加适合。 ### 回答3: 不可以,数据库Redis不支持传统的关系型数据库中的join操作。Redis是一款基于内存的缓存数据库,主要用于存储和访问键值对数据。它采用的数据结构是键值对哈希表,不支持表和表之间的关联查询。Redis的设计目标是高性能和高可用性,因此在功能上了很多的削减和简化。它主要提供了一些基本的操作,如设置键值对、获取键值对以及基于键的一些操作。Redis数据查询主要是通过键进行的,不支持多表关联查询的功能。如果需要进行多表关联查询,可以考虑使用传统的关系型数据库,如MySQL、Oracle等。数据库Redis主要适用于缓存、计数器、消息队列等场景,对于复杂的数据查询操作并不是最佳选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值