redis的连接池和管道
- 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高
- 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展
- 关系型数据库的优势:复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询;事务支持使得对于安全性能很高的数据访问要求得以实现
- 对于这两类数据库,对方的优势就是自己的弱势,所以如何利用好这两种数据库的强项,使其相互补充,是一个很重要的需要好好设计的问题
redis简介
[root@web ~]# cd /usr/local/src/
[root@web src]# wget http://download.redis.io/releases/redis-3.2.5.tar.gz
[root@web src]# tar -zxf redis-3.2.5.tar.gz
[root@web src]# cd redis-3.2.5
[root@web redis-3.2.5]# make [root@web redis-3.2.5]# vim /usr/local/src/redis-3.2.5/redis.conf //默认配置文件,把daemonize no 改为daemonize yes,允许后台启动 [root@web redis-3.2.5]# cd src
[root@web src]# pwd
/usr/local/src/redis-3.2.5/src
[root@web src]# ls
-rwxr-xr-x 1 root root 5580311 11月 25 11:18 redis-benchmark //基准测试
-rwxr-xr-x 1 root root 22185 11月 25 11:18 redis-check-aof //aof持久化
-rwxr-xr-x 1 root root 7826902 11月 25 11:18 redis-check-rdb //rdb持久化
-rwxr-xr-x 1 root root 5709036 11月 25 11:18 redis-cli //linux上的redis客户端
-rwxr-xr-x 1 root root 7826902 11月 25 11:18 redis-sentinel //哨兵,用于redis集群选举
-rwxr-xr-x 1 root root 7826902 11月 25 11:18 redis-server //redis服务端程序 [root@web src]# ./redis-server /usr/local/src/redis-3.2.5/redis.conf //启动redis [root@web src]# netstat -lnp //监听127.0.0.1:6379
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 4443/./redis-server
redis客户端安装
[root@web ~]# pip install redis [root@web ~]# ipython
In [1]: import redis
[root@web redis_py]# cat demon1.py
#!/usr/bin/env python import redis r = redis.Redis(host='localhost', port=6379, db=0, password=None) //实例化Redis这个类获得一个对象r,对象的方法就是redis的所有命令
r.set('name', 'aaa') //set()方法往服务端存入两个键值对
r.set('age', 30)
print r.get('name') //get(key)方法获取key对应的value
print r.keys() //keys()方法打印所有的key [root@web redis_py]# python demon1.py
aaa
['age', 'name']
redis连接池
[root@web redis_py]# cat demon2.py
#!/usr/bin/env python import redis def getConnection():
config = {
'host': 'localhost',
'port': 6379,
'db': 0,
'password': None
}
pool = redis.ConnectionPool(**config)
r = redis.Redis(connection_pool=pool)
return r if __name__ == '__main__':
r = getConnection()
r.set('gender', 'M')
print r.get('gender') [root@web redis_py]# python demon2.py
M
管道:
In [6]: help(r.pipeline)
Help on method pipeline in module redis.client: pipeline(self, transaction=True, shard_hint=None) method of redis.client.Redis instance //获取一个连接对象,通过连接对象创建一个管道
Return a new pipeline object that can queue multiple commands for //返回一个管道对象
later execution. ``transaction`` indicates whether all commands //自动执行多条命令(把多个请求发送到服务端)
should be executed atomically. Apart from making a group of operations
atomic, pipelines are useful for reducing the back-and-forth overhead //提高处理能力
between the client and server
使用管道和不使用管道的效率对比:
[root@web redis_py]# cat demon3.py
#!/usr/bin/env python import redis
import datetime
from demon2 import getConnection def withpipeline(r):
p = r.pipeline(transaction=True)
for i in xrange(1000):
key = 'test1' + str(i)
value = i+1
p.set(key, value)
p.execute() def withoutpipeline(r):
for i in xrange(1000):
key = 'test2' + str(i)
value = i+1
r.set(key, value) if __name__ == '__main__':
r = getConnection()
start = datetime.datetime.now()
withpipeline(r)
end = datetime.datetime.now()
offset = (end-start).microseconds
print 'With pipeline time: {0}'.format(offset)
start = datetime.datetime.now()
withoutpipeline(r)
end = datetime.datetime.now()
offset = (end-start).microseconds
print 'Without pipeline time: {0}'.format(offset) [root@web redis_py]# python demon3.py
With pipeline time: 16403
Without pipeline time: 43398
redis的连接池和管道的更多相关文章
- redis运用连接池报错解决
redis使用连接池报错解决redis使用十几小时就一直报异常 redis.clients.jedis.exceptions.JedisConnectionException: Could not g ...
- nodejs + redis/mysql 连接池问题
nodejs + redis/mysql 连接池问题 需不需要连接池 连接池的作用主要是较少每次临时建立连接所带来的开销.初步一看,nodejs运行单线程上,它不能同时使用多个连接,乍一看是不需要连接 ...
- Redis Java连接池调研
Redis Java连接池调研 线上服务,由于压力大报错RedisTimeOut,但是需要定位到底问题出现在哪里? 查看Redis慢日志,slowlog get 发现耗时最大的也是11000us也就是 ...
- python redis之连接池的原理
python redis之连接池的原理 转载地址 什么是连接池 通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接, 一般情况下 ...
- python 基础 10.0 nosql 简介--redis 连接池及管道
一. NOSQL 数据库简介 NoSQL 泛指非关系型的数据库.非关系型数据库与关系型数据库的差别 非关系型数据库的优势: 1.性能NOSQL 是基于键值对的,可以想象成表中的主键和值的对应关系,而且 ...
- Redis缓存连接池管理
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.util.Assert;import ...
- java客户端Jedis操作Redis Sentinel 连接池
pom配置: <dependency> <groupId>org.springframework.data</groupId> <artifactId> ...
- redis mysql 连接池 之 golang 实现
1 mysql 连接池代码 package lib import ( "database/sql" "fmt" "strconv" &quo ...
- redis单机连接池
一.配置文件 1. db.properties配置文件#IP地址 redis.ip = 127.0.0.1 #端口号 redis.port= #最大连接数 redis.max.total= #最大空闲 ...
- Redis 配置连接池,redisTemplate 操作多个db数据库,切换多个db,解决JedisConnectionFactory的设置连接方法过时问题。(转)
环境 springmvc jdk1.8 maven redis.properties配置文件 #redis setting redis.host=localhost redis.port=6379 r ...
随机推荐
- 了解URLSearchParams对象
URLSearchParams对象用于处理URL中查询字符串,即?之后的部分. 1.语法 其实例对象的用法和Set数据结构类似.实例对象本身是可遍历对象.但是不是遍历器. var paramsStri ...
- 腾讯技术岗位笔试&面试题(五)
说在前面 本篇文章是腾讯技术面试题目汇总第五篇. 后续将持续推出互联网大厂,如阿里,腾讯,百度,美团,头条等技术面试题目,以及答案和分析. 欢迎大家点赞关注转发. 1.define.const.typ ...
- 如何为在线客服系统的 Web Api 后台主程序添加 Bootstrap 启动页面
背景 我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.这个系统的核心后台主程序,在最早期是完全没有页面,经常有朋友部署之后,一访问是 404,以为没有部署成功.我一看这肯定不行啊,可后 ...
- Avalonia 国际化之路:Resx 资源文件的深度应用与探索
在当今全球化的软件开发浪潮中,应用的国际化(i18n)与本地化(L10n)显得尤为重要.Avalonia UI 作为一款强大的跨平台 UI 框架,为开发者提供了多种实现国际化的途径.其中,使用传统的 ...
- # 为什么要使用 MediatR 的 3 个理由和 1 个不使用它的原因
为什么要使用 MediatR 的 3 个理由和 1 个不使用它的原因 https://codeopinion.com/why-use-mediatr-3-reasons-why-and-1-reaso ...
- WPS在ArchLinux常见问题
问题简述wps在aur源上有包,直接下载安装即可,但是通过包管理器安装的wps会出现一些奇怪的问题,我遇到的有两个: wps在打开时提示缺少字体wps word不能导出pdf文档,同时wps pdf也 ...
- docker-安装Oracle11g
获取镜像 在线 docker pull oracleinanutshell/oracle-xe-11g 离线 tar包下载:链接: https://pan.baidu.com/s/1bRp6mSq ...
- Http2服务调用排坑记
原文作者:陈友行原文链接:https://www.nginx.org.cn/article/detail/89转载来源:NGINX开源社区著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- Qt编写可视化大屏电子看板系统27-模块5负荷分布
一.前言 负荷分布模块包括工序计划负荷.当日负荷.负荷百分比三个子模块,工序计划负荷用表格的形式展示不同工序在不同日期的负荷工作时长,比如组装工序在 2022-02-10 运行了88小时,一般表格显示 ...
- 飞书lark机器人 自动化发版
飞书lark机器人 自动化发版 #1 介绍 开发飞书机器人接收消息并调用构建接口, 实现自动化发版 发送指令 -> 机器人接收指令 -> 调用jenkins-job远程构建与部署 jenk ...