redis查询慢怎么解决 请求30次redis和请求30次数据库哪个更快?

[更新]
·
·
分类:互联网
3287 阅读

redis查询慢怎么解决

请求30次redis和请求30次数据库哪个更快?

请求30次redis和请求30次数据库哪个更快?

纯内存数据库,如果只是简单的 key-value,内存不是瓶颈。一般情况下,hash 查找可以达到每秒数百万次的数量级。瓶颈在于网络 IO 上。
根据你测的的 10000/s 来看,客户端和 redis 应该是部署在两台不同的机器,并且是使用同步的方式请求 redis. 每次请求需要通过网络把请求发送到 redis 所在的机器,然后等待 redis 返回数据。
时间大部分消耗在网络传输中。
如果把 redis 和客户端放在同一台机器,网络延迟会更小,一般情况下可以打到 60000 次每秒甚至更高,取决于机器性能。
锁不是影响性能的主要因素。
线程锁 (mutex_lock) 只有在遇到冲突的情况下性能会下降,而正常情况下,遇到冲突的概率很低。
如果只是简单的加锁、释放锁速度是非常快的,每秒钟上千万次没问题。
memcache 内部用到了大量的锁,并没有见到性能降低。
线程也不是影响吞吐量的重要因素。
如第一点来说,一般情况下,程序处理内存数据的速度远高于网卡接收的速度。
使用线程好处是可以同时处理多条连接,在极端情况下,可能会提高响应速度。
使用 epoll 或 libevent 等因为异步非阻塞 IO 编程只能这么做。
与之对应的是同步阻塞 IO 编程,使用多进程或多线程实现多条连接的处理,比如 apache。
一般情况下,异步非阻塞 IO 模型性能是远高于同步阻塞 IO 模型的,可以参考 nginx 与 apache 性能的对比。
libevent 并不比 redis 自己实现的 ae_event 慢,代码多是应为 ae_event 只实现了 redis 需要的功能,而 libevent 则具有更多的功能,比如更快的定时器、buffer event 模型,甚至自带了 DNS、HTTP 协议的处理。
并且 libevent 更通用,而 redis 只专注于 linux 平台。最后回答题主问题,快在哪?
1、纯内存操作2、异步非阻塞 IO

mysql表太大怎么解决?

解决方法如下:
第一优化你的sql和索引;
第二加缓存,memcached,redis;
第三以上都做了后,还是慢,就做主从复制或主主复制,读写分离,可以在应用层做,效率高,也可以用三方工具,第三方工具推荐360的atlas,其它的要么效率不高,要么没人维护;
第四如果以上都做了还是慢,不要想着去做切分,mysql自带分区表,先试试这个,对你的应用是透明的,无需更改代码,但是sql语句是需要针对分区表做优化的,sql条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,另外分区表还有一些坑,在这里就不多说了;
第五如果以上都做了,那就先做垂直拆分,其实就是根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;
第六才是水平切分,针对数据量大的表,这一步最麻烦,最能考验技术水平,要选择一个合理的sharding key,为了有好的查询效率,表结构也要改动,做一定的冗余,应用也要改,sql中尽量带sharding key,将数据定位到限定的表上去查,而不是扫描全部的表;