1、简介
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存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便,Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。磁盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。
2、安装 Python 的 redis-py库
[root@redis-120-20 ~]# pip3 install redis
3、连接
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)
4、向字符串中写入数据
# redis_conn.set(key,value)
redis_conn.set('ywm', 'test1')
5、设置多个键值
# hmset key FIELD1 VALUE1 ...FIELDN VALUEN
redis_conn.hmset('ywm6', {'k1':'v1', 'k2': 'v2'})
6、按字节截取字符串
r.set('book','Mastering Redis')
r.getrange('book',0,5) # 结果 Master
r.getrange('book',-5,-1) # 结果 Redis
r.getrange('book',0,-7) # 结果 Mastering
7、向字符串中读取数据
# redis_conn.get(key)
redis_conn.get('ywm')
8、获取多个值
# hmset key FIELD1 ...FIELDN
redis_conn.hmget('ywm6', 'k1', 'k2')
9、设置字符串的过期时间
# 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)
10、如果字符串的值为数字,可以自增和自减
# redis_conn.set(key,n)
redis_conn.set('ywm', '5')
redis_conn.incr('ywm', '1') #自增1
redis_conn.decr('ywm', '3') #自减3
11、向redis中添加一个字符串,key为kingname,value为现在时间
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)
12、按字节替换字符串指定位置的内容
redis_conn.set('book','Mastering Redis')
redis_conn.setrange('book',10,'MongoDB') # Redis替换后为MongoDB
redis_conn.setrange('book',20,'2017') # 空白处被"\x00"填充
13、获取hash中键值对的个数
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hlen("dic_name")
14、获取hash中所有的key的值
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hkeys("dic_name")
15、获取hash中所有的value的值
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hvals("dic_name")
16、检查name对应的hash是否存在当前传入的key
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hexists("dic_name","a1") #输出:True
17、删除指定name对应的key所在的键值对
redis_conn.hmset("dic_name",{"a1":"aa","b1":"bb"})
redis_conn.hdel("dic_name","a1")
18、自增hash中key对应的值,不存在则创建key=amount(amount为整数)
redis_conn.hincrby("demo","a",amount=2)