介绍

redis是业界主流的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应用程序会话,网站页面点击数等任何短暂的数据;

 

 

centos安装redis:

yum install epel-release

yum install redis

修改/etc/redis.conf

允许远程登陆,注释此行:#bind 127.0.0.1

修改 daemonize yes  允许后台运行服务

启动redis:redis-server /etc/redis.conf

启动cli命令行:redis-cli

 

redis-py代码示例如下:

import redis

r = redis.Redis('localhost', 6379)
r.set('n9', 'Sun')
r.set('n10', 'Flow')
print(r.get('n9'))

  redis-py连接池:

import redis, time
'''
redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作
如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认
情况下一次pipline是原子性操作
'''
pool = redis.ConnectionPool(host='localhost', port=6379)

r = redis.Redis(connection_pool=pool)

pipe = r.pipeline(transaction=True)

pipe.set('n11', 'Peter')
pipe.set('n12', 'Jack')
pipe.execute()

  redis的命令很多,具体参考:http://doc.redisfans.com/

redishelper:

import redis


class RedisHelper(object):
    def __init__(self):
        self.__conn = redis.Redis(host='localhost')
        self.chan_sub = 'fm110'
        self.chan_pub = 'fm110'

    #发布
    def publish(self, msg):
        self.__conn.publish(self.chan_pub, msg)
        return True

    #订阅
    def subscribe(self):
        pub = self.__conn.pubsub()
        pub.subscribe(self.chan_sub)
        pub.parse_response()
        return pub

  

redis订阅者:

from redishelper import RedisHelper


obj = RedisHelper()
sub = obj.subscribe()

while True:
    msg = sub.parse_response()
    print(msg)

  redis发布者:

from redishelper import RedisHelper


obj = RedisHelper()

obj.publish('hello')