crazyhadoop 发表于 2014-08-11 10:30

[话题讨论]如何用好Redis(获奖名单已公布-2014-09-25)

获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-4155513-1-1.html

话题背景:

Redis是一个使用C语言编写的开源高性能Key-Value数据库,提供多种语言的API,想必大家已经在生产环境中大量使用过了,国内也有非常多的大型应用在使用Redis。那你了解过为什么Redis能获得如此广泛的使用,到底是哪些原因让他性能这么突出?所谓知己知彼百战百胜,大家来聊聊使用Redis的感受吧。

本期话题:

1. 现在Redis有被滥用的趋势,如何合理使用Redis,谈谈自己的认识。
2. 如何正确使用Redis的各种数据结构,比如list,set,hash等等。
3. 因为对Redis了解不够透彻,想必都踩过一些坑吧,比如,你使用过HGETALL吗? BGREWRITEAOF重写AOF文件会不会影响服务?聊聊踩过的坑吧,也可以从源码的层次上分析问题。

活动时间:

2014-8-11至2014-9-11

活动奖励:

Redis设计与实现 资深Redis技术专家撰写,深入了解Redis技术内幕的必读之作。从源码角度解析Redis的架构设计、实现原理和工作机制,为高效使用Redis提供原理性指导

本期奖品:
《Redis设计与实现》
http://images.china-pub.com/ebook3770001-3775000/3770218/zcover.jpg
作者: 黄健宏   
丛书名: 数据库技术丛书
出版社:机械工业出版社
ISBN:9787111464747
上架时间:2014-6-3
出版日期:2014 年6月

样章试读:
http://wenku.it168.com/d_001459495.shtml

tedcy 发表于 2014-08-11 11:33

发了半个小时居然没有人回复么。
如何用好redis。
我对redis的使用也只是刚接触,提不出什么好的见解,但是一直有一些困惑。提三个问题,看看能不能引出高人的思路,楼主不介意吧。
目前大型集群基本都使用了proxy方案,比较出名的就是twemproxy。

1 上线业务在有时候会出现time out情况,经过排查基本是由于redis层RDB机制导致的,这方面有什么好的优化方案吗?
2 目前很多业务严重依赖redis,有一些不设置超时时间,几乎当作DB在用,在这种情况下,对redis-proxy集群做在线扩容,如果直接加机器,对proxy访问就会出现数据丢失的情况。不使用tail,ssdb之类的方式,不修改redis代码,有什么好的优化方案吗?
3 redis 的非string对象,例如hash对象,由于key - field - value的数据结构,在proxy下只能对key做hash,因此在大容量的非string对象存在时,就会使得redis集群分布严重不均衡,包括官方的redis 3.0也存在这样的问题。
   为了保证分布均衡,业务层不得不对key进行切分,这样对非string对象做排序之类就无法进行,这方面有什么好的优化方案吗?

另外目前的redis 3.0 apache版本如何,有哪位大神用在上线环境了吗?
写的可能不是很清楚详尽,顿首望高人答疑解惑。

wenhq 发表于 2014-08-11 12:26

本帖最后由 wenhq 于 2014-08-25 18:30 编辑

1. 现在Redis有被滥用的趋势,如何合理使用Redis,谈谈自己的认识。
a.那最近遇到的一些case来说吧,有些业务线用的是redis+keepalived 结构。但其中redis master 因io的问题导致访问无响应,这时keepalived还是检测到master在运行,实际上已经不可用了。
2. 如何正确使用Redis的各种数据结构,比如list,set,hash等等。
我们在使用keys的时候会遇到redis压力过大导致没有相应的情况。ltwemproxy中有些命令是无法执行的。
3. 因为对Redis了解不够透彻,想必都踩过一些坑吧,比如,你使用过HGETALL吗? BGREWRITEAOF重写AOF文件会不会影响服务?聊聊踩过的坑吧,也可以从源码的层次上分析问题。
bgwriteaof会对服务有一定的影响。

wenhq 发表于 2014-08-11 12:26

支持,稍后补充。先吃饭

action08 发表于 2014-08-11 12:32

redis有个好的地方可持久性,重启系统后数据保留,
不好的地方,数据量访问量大了后会偶尔在短时间内失去响应,就是坑

jieforest 发表于 2014-08-11 13:21

本帖最后由 jieforest 于 2014-08-11 23:27 编辑

好书,占位
——————————————
1. 现在Redis有被滥用的趋势,如何合理使用Redis,谈谈自己的认识。
Redis是否被滥用,主要还是取决于架构师是否对Redis有正确的认识。
Redis是“数据结构”的服务器,基于键值存储,是内存数据库,可持久化到磁盘,支持主从复制。
Redis的特点是高性能,持久存储,适应高并发。
Redis的集群目前还是一个老大难的问题,据官方说在Redis 3.0会发布支持集群的版本。
Redis支持所有的主流编程语言,有Python、Ruby、Erlang、PHP等客户端,使用很方便。
Redis的应用场景是很广泛的,比如:替代Memcached,构建队列系统,构建发布/订阅的实时消息系统,作为计数器,构建排行榜应用等等。
对Redis有清晰的认识,就不会滥用Redis。

2. 如何正确使用Redis的各种数据结构,比如list,set,hash等等。
Redis支持的数据结构的类型有很多,以题目说的list为例,是列表数据结构,使用LPUSH、LRANGE等命令操作列表对象,有两种编码方式:REDIS_ENCODING_ZIPLIST和REDIS_ENCODING_LINKEDLIST,弄清楚列表命令的实现是正确使用列表数据结构的前提。BLPOP、BRPOP和BRPOPLPUSH三个命令都可能造成客户端被阻塞,可称为列表的阻塞原语,当阻塞原语被用于空列表时,会阻塞客户端;当阻塞原语用于非空列表时,会执行无阻塞版本的LPOP、RPOP和RPOPLPUSH命令。
其他的数据结构类似,弄清楚其实现原理才能更好的使用它。

3. 因为对Redis了解不够透彻,想必都踩过一些坑吧,比如,你使用过HGETALL吗? BGREWRITEAOF重写AOF文件会不会影响服务?聊聊踩过的坑吧,也可以从源码的层次上分析问题。
在Redis开发方面,我遇到的坑是应用场景方面的。
业务场景中有这样的需求,要在内存中存储“用户名”->“标识字符串”,而且用户名和标识字符串都是唯一的。可以通过用户名查找标识字符串。
这是典型的键值存储,用Redis搞定很合适。
在项目开发到一半的进度,客户又提出了新需求,前面的不变,加上新的需求:要求能够通过标识字符串查找对应的用户名。
也就是说,在Redis的键值存储中,要求通过值去查找键名。
这就很麻烦了,Redis没有这样的功能。
最终我们采用了别的手段来搞定了这个新需求。

action08 发表于 2014-08-11 14:47

回复 2# tedcy


    hash本来就是不均匀的,碰运气了,

chenyx 发表于 2014-08-11 15:12

好活动支持下。

tedcy 发表于 2014-08-11 16:02

回复 7# action08

twemproxy的一致性哈希目前对key数量分布还是非常均衡的
但是大key对象严重影响了分布性能,线上0.8G VS 3.2G也是存在的

切分业务的大KEY对象只是权益之计

长远来看,需要一个比较好的解决方案啊。。


   

action08 发表于 2014-08-11 16:10

本帖最后由 action08 于 2014-08-11 16:43 编辑

回复 9# tedcy

但是大key对象严重影响了分布性能
不好意思,我有点书面化哈,没理解你要表达什么

分布性能是说大key计算本身影响性能,还是分布情况不理想??
页: [1] 2 3
查看完整版本: [话题讨论]如何用好Redis(获奖名单已公布-2014-09-25)