关于Redis到底能不能做数据库以及一些NoSQL的问题

2013-10-23 13:15:06 +08:00
 tonghuashuai
小弟有几个问题不太明白,特烦请各位给解释一下:
1.能不能单纯的用Redis做数据库,由于Redis是基于内存的,只是周期性的转到持久存储,这样是不是就不能保证数据了
2.上面说到的问题,貌似MongoDB没有吧
3.看@Livid的博客,V2EX用到了Redis,是用作数据存储还是只是用做缓存
3.豆瓣、facebook等等一些架构用到了Redis、memcached等等,但是还是用到了MySQL等关系型数据库,是不是可以说传统的关系型数据库的地位在有些地方还是不能撼动的
9043 次点击
所在节点    Redis
21 条回复
mahone3297
2013-10-23 13:40:44 +08:00
1. 是,不能保证数据,所以不能做数据库
2. mongodb是数据库
3. 我猜肯定是缓存
4. redis,memcached是缓存,不是数据库。。。
分清了redis不是数据库,上面的问题,就都有答案了。。。
cloudzhou
2013-10-23 14:02:24 +08:00
@mahone3297 redis 可以不单单是缓存,你可以把 redis 理解为一个长久的 hashtable, sortset 等等,redis 是为了加速特定结构的数据,这些数据访问量非常大,放在数据库压力大。
Ricepig
2013-10-23 14:06:52 +08:00
redis只是害怕意外停机,可以通过多机的方式避免某机器意外停机
mongodb
2013-10-23 14:14:39 +08:00
可以做纯数据库,意外停机造成数据丢失的问题可以通过架构解决。
如果拿不准的话可以暂时作为缓存或者某些特定的库和表尝试用redis,抗压能力是杠杠的。
也可以尝试使用一下我,对比下。
mahone3297
2013-10-23 14:15:03 +08:00
@cloudzhou 对,我知道。是为了加速,所以我把他理解成缓存。。。可能用词不准,但是意思就这个意思,理解就行。反正不是数据库。redis的官网说他是个“数据结构服务”
tonghuashuai
2013-10-23 14:35:30 +08:00
@mahone3297
@cloudzhou
@Ricepig
@mongodb
多谢各位,明白了
misaka
2013-10-23 14:49:53 +08:00
@mahone3297

Bullshit.
Do confirm your answer before answering questions.

---

Redis on Ubuntu 10.04 (Lucid) #on sidebar
http://library.linode.com/databases/redis/ubuntu-10.04-lucid
"/database"

http://en.wikipedia.org/wiki/Redis
"Type: Document-oriented database"

http://redis.io/topics/quickstart
Search "database"

http://www.redisbook.com/en/latest/
See "数据库"

---

Redis is database.
shiny
2013-10-23 14:57:50 +08:00
NoSQL 绝不是要取代传统 SQL,而是传统 SQL 有益的补充。
Redis 的可靠性没有想象中的那么弱,开启 aof 及多机复制,一般应用场合足矣。
mahone3297
2013-10-23 15:33:33 +08:00
@misaka 看看官网
Redis is an open source, BSD licensed, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.
反正不管怎样,我还是不会认为他是database
Livid
2013-10-23 17:17:19 +08:00
V2EX 目前在用 Redis 存储一些用户的设置数据(比如 ignore 的主题)。

这样的一个好处是,除了性能好之外,在添加这类新数据的时候,不会涉及任何的 scheme change,也就是说不需要运行 alter table 自然也就不存在锁表问题。
tonghuashuai
2013-10-23 17:45:56 +08:00
@Livid
我可以这么理解不:可以使用Redis存一些不经常改动的数据,这样由内存到持久存储同步时,系统异常丢数据的概率就比较小了
chloerei
2013-10-23 18:14:31 +08:00
@tonghuashuai 应该存经常改动,丢了也没关系或者可以从数据库重建的数据。
allenwei
2013-10-23 18:37:14 +08:00
Redis最常用的就是cache和queue吧, 还有作为缓冲区的,充分发挥读写快的优势
lerry
2013-10-23 18:39:22 +08:00
redis怎么不是数据库了,开启 Replication 和 aof 已经很可靠了
用到redis的,我觉得大部分不是作为缓存的
likuku
2013-10-23 21:22:32 +08:00
@tonghuashuai 你这种就是需要个数据库的缓存,memcached 很适合。
moroumo
2013-10-23 21:26:41 +08:00
我觉得redis做数据库到没多大问题,对于一般的应用而言。
但是如果数据需要从不同的字段或者维度做统计的话,还是db的好。
RisingV
2013-10-24 00:51:54 +08:00
一句话,不合适。用aof失去了高可用性本意。redis所有的优势都是建立在对内存复杂数据结构高效的原子操作上,这样就看出aof是一个非常不协调的部分。用snapshot才是好的使用方式。
Ricepig
2013-10-24 13:40:57 +08:00
@lerry 最大问题来自于redis和db的一个差异:普通db是写入磁盘后才认为操作完成,redis是写入内存就意味操作完成,replica和aof可以认为是后续附加操作。这一点点貌似只是先后的差别,对于数据的可靠性考量还是不一样的。
当然,replica和aof会把丢数据的概率降低很多。
est
2013-10-24 15:24:40 +08:00
@Livid 比如我这样建立一个表: create table settings (id int, key varchar(100), value varchar(500) ); 可以解决你的alter table麻烦不?


@lerry redis的问题是,k-v方便,keys() 超级卡超级麻烦。一般都通过数据冗余来解决scan的操作。感觉就是不如OLTP方便。
stackpop
2013-10-24 16:42:03 +08:00
和架构有很大关系。

个人所负责的业务,一般是热数据放在内存中,使用redis等,然后ssd中有一份完整数据,磁盘也有一份。

对于实时服务,一般使用内存中的数据,一旦机器挂掉,就重新从磁盘导出一份进内存。

对于非实时的服务,就没这么讲究了,很有可能就是提交一个map/reduce的任务,让他一直跑,跑完了,结果还是放回内存,等待用户来取。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/86599

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX