0.
http://qing.blog.sina.com.cn/tj/4a1a3ea33300004d.html
直接用压力测试代码压线上服务器,果然也慢。继续看 log ,似乎慢的请求有一个共性:某个时间点,几十个请求的耗时是一样的,都是类似 127ms,132ms 这样的。如果是真实的处理耗时,不应该会如此雷同才对,那么就应该是排队等待耗时了。这一批请求应该是同时发起的,因为某种原因,一同在某个地方排队,等轮到它们的时候,真实的处理耗费的时间连 1 ms 都不到,所以在 log 里看来,耗时如此相似。接下来的问题就是,为什么会排队?在哪排队?后面一个问题比较好回答,Redis
是单线程的,按照网络接收到的包的顺序处理请求,前一个请求没有处理完之前,后面的请求都在 server 的 tcp/ip buffer 里排队,等待处理。那剩下的就只有一个问题了:为什么会有排队现象?
仔细看业务代码,终于找到一个可疑的地方:hgetAll 。难道是一个 hgetAll 堵住了后面所有的请求?压测的脚本一般都只压 get,set,顶多也就试试 hget,hset,肯定不会压 hgetAll 这么变态的命令的。而用 strace 查看 redis server 的状态,也只能看到网络调用耗时。那么也就只能这么解释了:hgetAll 命令占用了大量的网络带宽,导致它完成之前,其它的命令的回包都在
tcp buffer 里面堵着了。
1.
Redis是单线程的!当它处理一个请求时其他的请求只能等着。通常请求都会很快处理完,但是当我们使用HGETALL的时候,必须遍历每个字段来...
http://huoding.com/2013/01/21/214
2.
http://www.kazaff.me/2013/02/21/hiredis%E5%85%A5%E9%97%A8/
3.http://www.searchdatabase.com.cn/showcontent_72701.htm
低效操作产生的延迟
单线程的一个结果是,当一个请求执行得很慢,其他的客户端调用就必须等待这个请求执行完毕。当执行GET、SET或者LPUSH 命令的时候这不是个问题,因为这些操作可在很短的常数时间内完成。然而,对于多个元素的操作,像SORT,LREM, SUNION 这些,做两个大数据集的交叉要花掉很长的时间。文档中提到了所有操作的算法复杂性。
在使用一个你不熟悉的命令之前系统的检查它会是一个好办法。
如果你对延迟有要求,那么就不要执行涉及多个元素的慢操作,你可以使用Redis的replication功能,把这类慢操作全都放到replica上执行。可以用Redis 的Slow Log来监控慢操作。此外,你可以用你喜欢的进程监控程序(top, htop, prstat, 等...)来快速查看Redis进程的CPU使用率。如果traffic不高而CPU占用很高,八成说明有慢操作。
4.
http://lingqi1818.iteye.com/blog/1182429
结论:
1.由于服务器采用单进程单线程的模型,服务器实际响应客户请求其实是先来后到的串行模式,只要服务器算法OK,那么单个请求响应时间绝对OK。
2.假如你要提升服务器的并发能力,那么可以采用在单台机器部署多个redis进程的方式。
*********************
1.Data Modeling In Redis http://openmymind.net/Data-Modeling-In-Redis/
2.
3.https://github.com/jiedan/redis-search-py/blob/master/redis_search/query.py
4.
MongoDB范围查询的索引优化
(联合索引)
http://blog.nosqlfan.com/html/4117.html
分享到:
相关推荐
5. Sorted Set:使用`ZRANGE key start stop [WITHSCORES]`按分数顺序获取部分成员,`ZREVRANGE key start stop [WITHSCORES]`按分数降序获取。 七、Redis的其他功能 - 事务:Redis支持多条命令的原子执行,通过`...
Spring Data Redis是Spring Framework的一个模块,它提供了一个高级抽象层来简化与Redis数据库的交互,使得开发者可以更加方便地使用Redis的数据结构,如String、Hash、List、Set和Sorted Set。 首先,我们需要在...
2. **云存储:** 在云计算环境下,Redis能够提供灵活的扩展性和高可用性,非常适合云存储环境下的数据管理和缓存服务。 3. **实际应用案例:** - **社交网络:** 如Facebook等社交媒体平台利用Redis来存储用户会话...
它支持多种数据结构,包括字符串(String)、列表(List)、集合(Set)、哈希表(Hash)和有序集合(Sorted Set),这些数据结构为开发人员提供了丰富的操作选项。 ### Redis 安装步骤 1. **安装 GCC**: Redis 的...
Redis 支持多种数据结构如字符串(Strings)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)以及哈希(Hashes)等,并且所有的操作都是原子性的。为了保证高效性,Redis 将数据存储在内存中,并周期性地将更新的数据...
排序(List, Set, Sorted Set) SORT key BY pattern LIMIT start end GET pattern ASC|DESC ALPHA 按照指定模式排序集合或List SORT mylist 默认升序 ASC SORT mylist DESC SORT mylist LIMIT 0 10 从序号0...
- **Value**:值可以是多种类型,包括String、List、Set、Sorted Set和Hashes。 - **String**:最基础的数据类型,可以存储普通字符串、整数或浮点数。 - **编码方式**:底层使用字节数组存储,不同的编码方式适用...
- `SET key value`:设置键的值。 - `GET key`:获取键的值。 - `INCR key`:将键中的数字值增一。 - `DECR key`:将键中的数字值减一。 - 更多字符串操作如`SETNX`, `SETEX`, `STRLEN`等。 2. **Hashes类型及...
Redis 支持五大数据类型:String、List、Set、Hash 和 Sorted Set。下面我们将逐一介绍这些数据类型的常用操作: 1. **String**: String 类型是最基础的数据类型,可以存储字符串、整数或浮点数。你可以使用 `SET ...
Redis支持多种数据结构,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)以及有序集合(sorted sets)。此外,Redis还提供了如Pub/Sub模式这样的高级功能,可以用来构建消息队列、实时分析平台等...
- **Sorted Set(有序集合)**: 结合了集合和排序的功能,成员有分数。使用`ZADD key score member`添加带分数的成员,`ZRANGE key start stop [WITHSCORES]`按分数排序获取成员。 2. **命令操作**: - **增删...
Redis支持五种基本数据类型:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。 1. 字符串(String):最基础的数据类型,可以存储任何字符串或数字,如`SET key value`、`GET key`。 2. ...
Redis 支持多种数据结构,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据结构的使用可以根据业务需求来选择。例如,可以使用哈希存储用户信息,列表存储消息队列...
首先,我们来了解一下Redis的基本数据类型:字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据类型为各种复杂操作提供了基础。 1. 字符串(String):Redis中最基础的...
Redis 支持五种基本数据类型:String(字符串)、List(列表)、Set(集合)、Sorted Set(有序集合)和Hash(哈希)。这些数据类型提供了丰富的操作命令,使得Redis在缓存、消息队列、计数器等多个场景中广泛应用。...
3. `type key`:返回键所存储的数据类型,如字符串(string)、列表(list)、哈希表(hash)、集合(set)或有序集合(sorted set)。 4. `exists key`:检查键是否存在,返回1表示存在,0表示不存在。 5. `del key...
Redis 是一个开源的内存...这些命令只是Redis中的一部分,还有更多复杂的数据结构如哈希(Hash)和有序集合(Sorted Set)以及相关的操作命令。熟练掌握这些基本命令,能帮助我们更好地利用Redis进行高效的数据存储和操作。
1. **数据类型**:Redis提供了五种主要的数据类型,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)以及有序集合(Sorted Set)。 - **字符串**:最简单的键值对存储方式,适用于大多数基本数据...
5. 有序集合(Sorted Set):集合基础上增加了分数(score)字段,按分数排序。 三、Redis操作命令 1. 基本操作:`SET key value`设置键值,`GET key`获取键值,`DEL key`删除键。 2. 哈希操作:`HSET key field ...