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 ...
随机推荐
- 震惊!推荐一款AI驱动的自动化测试神器:TestCraft
在当今快速迭代的软件开发环境中,自动化测试已经成为确保软件质量的重要一环.然而,传统的手动录制和编写测试脚本的方式不仅耗时耗力,还难以跟上敏捷开发的节奏. 本文将为大家介绍一款基于AI技术的自动化测试 ...
- 不会前端也能写官网?没问题,Devbox+Cursor 带你起飞
大家平时都是怎么给自己的产品开发官方网站的? 是不是先在本地配置好环境,然后使用 IDE 写代码,写完代码后部署到服务器生成预览链接,团队协作成员再打开浏览器访问,然后你再修改,再部署,再访问,再修改 ...
- Playfair密码
Playfair密码 Playfair cipher (普莱费尔密码)一种古典对称式密码,是首个双字母替换的加密法.尽管以现在的眼光来看这种加密是非常不安全的,但是它加密的过程还是蛮有意思的. 这种加 ...
- R数据分析:做量性研究的必备“家伙什”-furniture包介绍
In conjunction with many other tidy tools, the package should be useful for health, behavioral, and ...
- 使用 Azure AI Studio 构建和部署使用提示流的问答助驾系统
使用 Azure AI Studio 构建和部署使用提示流的问答助驾系统 See: Build and deploy a question and answer copilot with prompt ...
- 在 ASP.NET Core 中进行打包 (Bundling) 和紧缩 (Minification)
在 ASP.NET Core 中进行打包 (Bundling) 和紧缩 (Minification) Bundler & Minifier for Visual Studio 2019 Bun ...
- C#字符串拼接的几种方式及其性能分析对比
前言 在C#编程中字符串拼接是一种常见且基础的操作,广泛应用于各种场景,如动态生成SQL查询.构建日志信息.格式化用户显示内容等.然而,不同的字符串拼接方式在性能和内存使用上可能存在显著差异.今天咱们 ...
- linux shell移植,sh不支持数组及bash移植
查看此时系统shell ls -al /bin/sh Linux 操作系统缺省的 shell 是Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,与 Bou ...
- Qt/C++音视频开发48-推流到rtsp服务器
一.前言 之前已经打通了rtmp的推流,理论上按照同样的代码,只要将rtmp推流地址换成rtsp推流地址,然后格式将flv换成rtsp就行,无奈直接遇到协议不支持的错误提示,网上说要换成rtp,换了也 ...
- IM跨平台技术学习(三):vivo的Electron技术栈选型、全方位实践总结
本文由vivo技术团队Yang Kun分享,原题"electron 应用开发优秀实践",本文有修订. 1.引言 在上篇<Electron初体验(快速开始.跨进程通信.打包.踩 ...