Redis 是一个key-value存储系统。和Memcached相似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操做,并且这些操做都是原子性的。在此基础上,redis支持各类不一样方式的排序。与memcached同样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操做写入追加的记录文件,而且在此基础上实现了master-slave(主从)同步。python
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合能够对关系数据库起到很好的补充做用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便,Redis支持主从同步。数据能够从主服务器向任意数量的从服务器上同步,从服务器能够是关联其余从服务器的主服务器。这使得Redis可执行单层树复制。磁盘能够有意无心的对数据进行写操做。因为彻底实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。redis
[root@redis-120-20 ~]# pip3 install redis
redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。数据库
redis链接实例是线程安全的,能够直接将redis链接实例设置为一个全局变量,直接使用。若是须要另外一个Redis实例(or Redis数据库)时,就须要从新建立redis链接实例来获取一个新的链接。同理,python的redis没有实现select命令。缓存
# 第一种方式:普通
importredis
redis_conn= redis.Redis(host='172.17.120.20', port= 6301, password= 'rds6301_paswd', db= 0)
# 第二种方式:链接池
importredis
redis_pool= redis.ConnectionPool(host='127.0.0.1', port= 6379, password= 'rds6301_paswd', db= 0)
redis_conn= redis.Redis(connection_pool= redis_pool)
# redis_conn.set(key,value)
redis_conn.set('ywm', 'test1')
# hmset key FIELD1 VALUE1 ...FIELDN VALUEN
redis_conn.hmset('ywm6', {'k1':'v1', 'k2': 'v2'})
r.set('book','Mastering Redis')
r.getrange('book',0,5) # 结果 Master
r.getrange('book',-5,-1) # 结果 Redis
r.getrange('book',0,-7) # 结果 Mastering
# redis_conn.get(key)
redis_conn.get('ywm')
# hmset key FIELD1 ...FIELDN
redis_conn.hmget('ywm6', 'k1', 'k2')
# set(name, value, ex=None, px=None, nx=False, xx=False)
ex:过时时间(秒),时间到了后redis会自动删除
px:过时时间(毫秒),时间到了后redis会自动删除。ex、px二选一便可
nx:若是设置为True,则只有name不存在时,当前set操做才执行
xx:若是设置为True,则只有name存在时,当前set操做才执行
redis_conn.set('ywm', 'test2', ex=10)
# redis_conn.set(key,n)
redis_conn.set('ywm', '5')
redis_conn.incr('ywm', '1') #自增1
redis_conn.decr('ywm', '3') #自减3
importredis
importdatetime
redis_conn= redis.Redis(host='172.17.120.20', port= 6301, password= 'rds6301_paswd', db= 1)
now= datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
redis_conn.set('ywm',now)
redis_conn.set('book','Mastering Redis')
redis_conn.setrange('book',10,'MongoDB') # Redis替换后为MongoDB
redis_conn.setrange('book',20,'2017') # 空白处被"\x00"填充
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hlen("dic_name")
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hkeys("dic_name")
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hvals("dic_name")
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hexists("dic_name","a1") #输出:True
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hdel("dic_name","a1")
redis_conn.hincrby("demo","a",amount=2)