python 使用 rabbitmq/redis/mysql 

 rabbitmq详解 : http://www.cnblogs.com/0zcl/archive/2017/02/09/6370088.html

 

 

 

redis

redisredis是业界主流的key-value nosql 数据库之一。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步

 

redis优点:

  • 异常快速 : Redis是非常快的,每秒可以执行大约110000设置操作,81000个/每秒的读取操作。
  • 支持丰富的数据类型 : Redis支持最大多数开发人员已经知道如列表,集合,可排序集合,哈希等数据类型。
  • 操作都是原子的 : 所有 Redis 的操作都是原子,从而确保当两个客户同时访问 Redis 服务器得到的是更新后的值(最新值)。
  • MultiUtility工具:Redis是一个多功能实用工具,可以在很多如:缓存,消息传递队列中使用(Redis原生支持发布/订阅),在应用程序中,如:Web应用程序会话,网站页面点击数等任何短暂的数据;

 

安装

  在centos7上,

# 可以直接运行下面命令安装
yum install -y redis

# 启动
systemctl start redis

# 命令行连接
redis-cli
127.0.0.1:6379>info  # 查看redis配置信息

 

python 操作redis,需要使用redis这个模块

pip install redis
或者
easy_install redis
或者 源码安装,也可以使用pycharm上的插件安装

一、string操作  

 1. python操作redis基本语法

import redis
  
r = redis.Redis(host='192.168.1.101', port=6379)
r.set('foo', 'Bar')
print r.get('foo')

2.连接池

redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

 

 

3. 基本操作

# 在linux安装后,进入客户端

127.0.0.1:6379> help set

  SET key value [EX seconds] [PX milliseconds] [NX|XX]
  summary: Set the string value of a key
  since: 1.0.0
  group: string
127.0.0.1:6379> set name feixiang ex 4
OK
127.0.0.1:6379> get name
"feixiang"
127.0.0.1:6379> get name
"feixiang"
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> set name1 feixiang
OK
127.0.0.1:6379> get name1
"feixiang"
127.0.0.1:6379> set name1 dada nx 
(nil)
127.0.0.1:6379> set name2 dada nx 
OK
127.0.0.1:6379> get name2
"dada"
127.0.0.1:6379> set name3 aaaa xx
(nil)
127.0.0.1:6379> set name2 aaaa xx
OK
127.0.0.1:6379> get name2
"aaaa"
     ex,过期时间(秒)
     px,过期时间(毫秒)
     nx,如果设置为True,则只有name不存在时,当前set操作才执行
     xx,如果设置为True,则只有name存在时,岗前set操作才执行

 

mset

# 设置多个key的值
127.0.0.1:6379> mset key1 11 key2 22 key3 33
OK
127.0.0.1:6379> keys *
1) "key2"
2) "key3"
3) "key1"

mget

# 获取多个key的值
127.0.0.1:6379> keys *
1) "key2"
2) "key3"
3) "key1"

127.0.0.1:6379> mget key1 key2 key3
1) "11"
2) "22"
3) "33"

getset(name, value)

# 设置新的key的值并返回被修改的值
127.0.0.1:6379> get key1
"11"
127.0.0.1:6379> getset key1 8888
"11"
127.0.0.1:6379> get key1
"8888"

getrange(key, start, end)

# 相于当切片,把key的值提取字符位
# getrange key start end

127.0.0.1:6379> set name feixiang
OK
127.0.0.1:6379> get name
"feixiang"
127.0.0.1:6379> getrange name 1 2
"ei"
127.0.0.1:6379> getrange name 0 3
"feix"

setrange(name, offset, value)

# 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)

127.0.0.1:6379> get name
"feixiang"
127.0.0.1:6379> setrange name 0 add
(integer) 8
127.0.0.1:6379> get name
"addxiang"
127.0.0.1:6379> get name
"addxiang"
127.0.0.1:6379> setrange name 8 add
(integer) 11
127.0.0.1:6379> get name
"addxiangadd"
127.0.0.1:6379> setrange name 8 99999
(integer) 11
127.0.0.1:6379> get name
"addxiang99999"

setbit(name, offset, value)

   对name对应值的二进制表示的位进行操作 

getbit(name, offset)

   获取name对应的值的二进制表示中的某位的值 (0或1)

strlen(name)

  返回name对应值的字节长度(一个汉字3个字节)

incr(self, name, amount=1)

  自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增

incrbyfloat(self, name, amount=1.0)

  自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增

decr(self, name, amount=1)

   自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减

append(key, value)

  在redis name对应的值后面追加内容

 

二、HASH操作  

 

三、list  

 

四、集合  

 

 

  

 

posted on 2017-05-24 11:33  奋斗德路  阅读(134)  评论(0)    收藏  举报