一. NOSQL 数据库简介
NoSQL 泛指非关系型的数据库。非关系型数据库与关系型数据库的差别
非关系型数据库的优势:
1.性能NOSQL 是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL 层的解析,所以性能非常高。
2.可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
 
关系型数据库的优势:
1. 复杂查询可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
2.事务支持使得对于安全性能很高的数据访问要求得以实现。对于这两类数据库,对方的优势就是自己的弱势。反之亦然。但是近年来这两种数据库都在向着另外一个方向进化。例如:NOSQL 数据库慢慢开始具备SQL 数据库的一些复杂查询功能的雏形,比如 Couchbase 的index 以及 MONGO 的复杂查询。对于事务的支持也可以用一些系统级的原子操作来实现例如乐观锁之类的方法来曲线救国。SQL 数据库也开始慢慢进化,比如 HandlerSocker 技术的实现,可以在MYSQL上实现对于SQL 层的穿透,用NOSQL 的方式访问数据库,性能可以上达到甚至超越NOSQL 数据库。可扩展性上例如Percona Server ,可以实现无中心化的集群。虽然这两级都因为各自的弱势而开始进化出另一极的一些特征性,但是这些特性的增加也会消弱其本来具备的优势,比如Couchbase上的index 的增加会逐步降低数据库的读写性能。所以构建系统的短期和长期存储策略,用好他们各自的强项是架构师需要好好考虑的重要问题。
 
 
二. python 操作 redis
redis 的概念:
redis 是一个key-value 存储系统。和Memcached 类似,它支持存储的value类型相对更多,包括string ,list,set(集合),zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持 push/pop add/remove 及取交际并集和差集更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value 数据库。redis 的出现,很大程度补偿了memcached 这类 key/value 存储的不足,在部分场合可以对关系数据库起到很好的补充作用。
Readis 支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis 可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
 
 
三. Redis 的搭建
或如下进行简易安装redis
#cd /usr/local/src
#tar xzf redis-3.0.1.tar.gz
#cd redis-3.0.1
#make
#更改redis.conf 把 daemonize no 更改为 daemonize yes 。可以后台启动
#src/redis-server & 或 src/redis-server + redis.conf 配置文件路径
检查redis是否正常启动
Ps –ef |grep redis
Netstat –lnp |grep 6379
 
四 linux 上 redis 客户端安装
pip install redis
 
 

五. redis 的简单操作
 
#/usr/bin/python
#-*- coding:utf-8 -*-
#@Time :2017/11/26 21:06
#@Auther :liuzhenchuan
#@File :redis 安装.py
 
#pycharm 安装redis 只需导入redis模块
import redis
 
##一. redis 简单操作
#方法一,连接redis。及插入数据
 
redis_config = {
'host':'192.168.16.70',
'port':6379
 
}
r = redis.Redis(**redis_config)
 
#set 操作 第一个参数就是key 第二个参数就是value
r.set('liu','you are very good')
 
# r.keys 就是获取到所有的keys
print (r.keys())
 
# r.get 就是获取到key的值
print r.get('liu')
 
# 连接redis ,方法二
r = redis.Redis(host='192.168.16.70',port=6379)
 
 
##二. redis 连接池
print '##'*5 + 'redis 连接池' + '##'*5
def get_redis_connect():
redis_config = {
'host': '192.168.16.70',
'port': 6379
}
pool = redis.ConnectionPool(**redis_config)
r = redis.Redis(connection_pool=pool)
return r
if __name__ == '__main__':
r = get_redis_connect()
r.set('name','lzc')
r.set('age','18')
print r.get('name')
print r.get('age')
print r.keys()
 
>>>
##########redis 连接池##########
lzc
18
['name', 'liu', 'age']
 
 
六. redis 的管道
##可以一次执行多次redis 命令
管道:
redis-py 默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline 实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。减少功耗redis是一个cs模式的tcp server,使用和http类似的请求响应协议。一个client可以通过一个socket连接发起多个请求命令。每个请求命令发出后client通常会阻塞
并等待redis 服务处理,redis 处理完成后请求命令后会将结果通过相应报文返回给client。
 
 
 

七. 应用管道与不应用管道的时间差为10倍
 
#/usr/bin/python
#-*- coding:utf-8 -*-
#@Time :2017/11/26 23:39
#@Auther :liuzhenchuan
#@File :redis 管道.py
import datetime
import redis
 
 
def withpipe(r):
pipe = r.pipeline(transaction=True)
for i in xrange(1, 1000):
key = "test1" + str(i)
value = "test1" + str(i)
pipe.set(key, value)
pipe.execute()
 
 
def withoutpipe(r):
# pipe = r.pipeline(transaction=True)
for i in xrange(1, 1000):
key = "test1" + str(i)
value = "test1" + str(i)
r.set(key, value)
 
if __name__ == "__main__":
pool = redis.ConnectionPool(host="192.168.16.70", port=6379, db=0)
r1 = redis.Redis(connection_pool=pool)
r2 = redis.Redis(connection_pool=pool)
start = datetime.datetime.now()
print(start)
withpipe(r1)
end = datetime.datetime.now()
# print((end-start).microseconds)
print(end-start)
t_time = (end - start).microseconds
print("withpipe time is : {0}".format(t_time))
 
start = datetime.datetime.now()
withoutpipe(r2)
end = datetime.datetime.now()
t_time = (end - start).microseconds
print("withoutpipe time is : {0}".format(t_time))
 
 
>>>
2017-11-26 23:49:58.260000
0:00:00.063000
withpipe time is : 63000
withoutpipe time is : 489000
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

python 基础 10.0 nosql 简介--redis 连接池及管道的更多相关文章

  1. SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面

    一.Druid连接池 1.druid简介 Druid连接池是阿里巴巴开源的数据库连接池项目.Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能.功能强大,能防SQL注入,内置Login ...

  2. 『Python基础-10』字典

    # 『Python基础-10』字典 目录: 1.字典基本概念 2.字典键(key)的特性 3.字典的创建 4-7.字典的增删改查 8.遍历字典 1. 字典的基本概念 字典一种key - value 的 ...

  3. Go语言之从0到1实现一个简单的Redis连接池

    Go语言之从0到1实现一个简单的Redis连接池 前言 最近学习了一些Go语言开发相关内容,但是苦于手头没有可以练手的项目,学的时候理解不清楚,学过容易忘. 结合之前组内分享时学到的Redis相关知识 ...

  4. 十. Python基础(10)--装饰器

    十. Python基础(10)--装饰器 1 ● 装饰器 A decorator is a function that take a function as an argument and retur ...

  5. redis连接池 jedis-2.9.0.jar+commons-pool2-2.4.2.jar

    java使用Redis连接池  jar包为 jedis-2.9.0.jar+commons-pool2-2.4.2.jar jar下载地址 package com.test; import redis ...

  6. Swoole Redis 连接池的实现

    概述 这是关于 Swoole 入门学习的第九篇文章:Swoole Redis 连接池的实现. 第八篇:Swoole MySQL 连接池的实现 第七篇:Swoole RPC 的实现 第六篇:Swoole ...

  7. 三:Redis连接池、JedisPool详解、Redisi分布式

    单机模式: package com.ljq.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; ...

  8. redis连接池(JedisPool)资源归还及timeout详解

    转载. https://blog.csdn.net/yaomingyang/article/details/79043019 一.连接池资源类详解都在注释上 package redis.v1.clie ...

  9. redis连接池——JedisPool和JedisCluster的介绍与使用

    目录 Jedis使用方式的介绍 Redis连接池介绍 创建连接池配置文件 单机版的Redis连接池 集群版的Redis连接池 总结 Jedis使用方式的介绍 Jedis就是Java实现的操作Redis ...

随机推荐

  1. Split Animation Clip From FBX and Multiply Mode Sprite

    Use Script To Creat 2D Animation Clip From Multiply Mode Sprite 很多时候美工拿过来的一张序列帧图片,我们需要转换成 Multiply M ...

  2. Linux 下动态查找磁盘数量方法

    #!/bin/bash ##磁盘数量 Disk=$( fdisk -l |grep 'Disk' |grep 'sd' |awk -F , '{print "%s",substr( ...

  3. 去除前后空格,Oracle和SQLSERVER都适用。ltrim(rtrim(’ ‘))

    Oracle自带去除方法:trim(). 但是sql语法中没有直接去除两头空格的函数,但有ltrim()去除左空格rtrim()去除右空格. 合起来用就是sql的trim()函数,即select lt ...

  4. hadoop english

    for the same 同样previously 之前地overlay v. 覆盖; 镀金variable expansion 变量替换processed for 处理 entry(entries) ...

  5. (转)jquery图片左右滚动

    <!DOCTYPE HTML> <html> <head> <title>基于jQuery的控制左右滚动效果_自动滚动版本</title> ...

  6. [性能测试] LoadRunner结果分析 – TPS(转)

    [性能测试] LoadRunner结果分析 – TPS 针对吞吐率和 TPS 的关系,这个在结果分析中如何使用,就个人经验和朋友讨论后,提出如下建议指导,欢迎同僚指正. 相关定义 响应时间 = 网络响 ...

  7. AngularJs学习笔记(4)——自定义指令

    对指令的第一印象:它是一个自定义标签! 先来看一个简单的指令: <!doctype html> <html ng-app="myApp"> <head ...

  8. VMware12.0下安装CentOS-6.9-x86_64-bin-DVD.iso

    使用的是vmware workstation 12 pro 创建虚拟机 注意上面的 安装程序光盘镜象文件(iso)(M): 是我之前配置,现在可以不做任何处理 此处使用的是centos的64位 在创建 ...

  9. javascript消息框

    JavaScript有三种消息框: 警告框:alert() alert("我是警告框!!") 确认框:confirm() function show_confirm() { var ...

  10. waterfall.js

    jq-waterfall是一款仿Pinterest网站的响应式无限动态加载图片瀑布流特效jQuery插件.该瀑布流特效使用ajax调用来动态加载图片,达到无限加载的效果.它使用简单,兼容性好,值得推荐 ...