Python与Redis交互

5. 实践: python 与 Redis

其他教程1
其他教程2
Redis 官方推荐的 Python客户端是 redis-py.

5.1 安装

pip3 install redis 

cookies

补充内容: Ubuntu下redis开启远程连接

打开redis配置:sudo vi /etc/redis/redis.conf

注释掉"bind 127.0.0.1",或者修改为"bind 0.0.0.0"

重启redis服务:sudo /etc/init.d/redis-server restart

5.2 连接数据库

导入模块

# 导入 redis-py:
import redis 

# 默认创建连接地址 127,0,0,1, 端口 6379
r = redis.Redis
r = redis.StrictRedis()
# 也可以显式指定需要连接的地址
r = redis.Redis(host='127.0.0.1', port=6379, db=0)
r = redis.StrictRedis(host='127.0.0.1', port=6379, db=0)

r.set('fo', 'hello world')
print(r.get('fo'))  
# b'hello world'
import redis
# 连接redis加个decode_responses=True,这样出来的直接是中文,不需要decode
r = redis.Redis(decode_responses=True)
r = redis.Redis('127.0.0.1', 6379, 0,decode_responses=True)
r.set('fooo', '早上好')
print(r.get('fooo'))  
# 早上好

事务和管道

事务
pipe = r.pipeline()
pipe.set('foo','far')
pipe.get('foo')
result = pipe.execute()
print(result) 
# [True, b'far']
管道
# transation = False
pipe = r.pipeline().set('foa','foo').get('foo').execute()
print(pipe)  
# [True, b'far']

5.3 简单操作

在python3下, 首先导入redis

>>> from redis import Redis,StrictRedis
>>> r = Redis(decode_responses=True)

5.3.1 String字符串操作

语法 作用 示例
r.set(key, value) 给key赋值为value r.set('key','value')
Out[22]: True
r.get(key) 返回数据库中key的value r.get('key')
Out[23]: 'value'
r.getset(key, value) 给key赋值为value, 并返回上次的value; 若无值, 则不返回 r.getset('key','vakue')
Out[24]: 'value'
r.mget(keys, *args) 返回多个key对应的value r.mget('name','key')
Out[25]: [None, 'vakue']
r.setnx(key,value) 当key不存在才设置value, 设置成功返回True, 当key存在返回False,不更改value r.setnx('foo','bar')
Out[26]: True
r.setex(key,time,value) 设置key的value, 指定有效期为time r.setex('fo',1,'jane')
Out[28]: True
r.setrange(key, offset, value) 设置key的value值的子字符串 r.setrange('name',6,'world')
Out[31]: 11
r.mset(**kargs) 批量赋值 r.mset({'n1':'john','n2':'kang'})
Out[33]: True
r.msetnx(**kargs) key不存在才批量赋值 r.msetnx({'n3':'n33','n4':'n44'})
Out[34]: True
r.incr(key, amount=1) 设置key的value增值操作, 默认1, key不存在则被创建并设为 amount, amount 可以为负数,表示减值 r.incr('age',1)
Out[36]: 1
r.incr('age',3)
Out[37]: 4
r.decr(key,amount=1) 设置key的value减值操作, 默认1, key不存在则被创建并设置为-mount, amount可以为负值, 表示增值 r.decr('score',2)
Out[38]: -2
r.append(key,value) 为key的值附加value r.append('nick','popo')
Out[40]: 6
r.substr(key,start,end=-1) 返回key的value子串, end默认为-1,包含end r.substr('nick',0)
Out[42]: 'OKpopo'
r.getrange(key,start,end) 返回key的value值从start到end子串,包含end r.getrange('nick',1,4)
Out[43]: 'Kpop'

5.3.2 Key操作

语法 作用 示例
r.exists(key) 判断一个key是否存在, 存在返回True, 解码为1,不存在返回False, 解码为0 r.exists('score')
Out[8]: 1
r.delete(key) 删除一个key, r.delete('nick')
Out[9]: 1
r.type(key) 判断一个key的类型 r.type('age')
Out[10]: 'string'
r.keys(pattern) 获取所有符合规则的key r.keys('a*')
Out[10]: ['age', 'ag']
r.randomkey() 获取随机的一个key r.randomkey()
Out[10]: 'key'
r.rename(key,newkey) 将key重命名 r.rename('age','height')
Out[10]: True
r.dbsize() 获取当前数据库中key的数目 r.dbsize()
Out[5]: 5
r.expire(key,time) 设定key的过期时间, 单位秒 r.expire('scor',2)
Out[12]: True
r.ttl(key) 获取key的过期时间, 单位秒, -1为永久不过期 r.ttl('score')
Out[14]: -1
r.move(key,db) 将key移动其他数据库 r.move('score',2)
Out[15]: True
r.flushdb() 删除当前选择数据库中的所有key r.flushdb()
Out[20]: True
r.flushall() 删除所有数据库中的所有key r.flushall()
Out[21]: True

5.3.3 List操作

语法 作用 示例
r.rpush(key,*values) 在key尾部(右边)添加值为value的元素, key传多个, 返回list元素个数 r.rpush('list',1,2,3)
Out[48]: 3
r.lpush(key,*values) 在key头部添加值为value的元素, 可以传多个,返回list元素个数 r.lpush('list',0)
Out[49]: 4
r.llist(key) 返回key的长度 r.llen('list')
Out[50]: 4
r.lrange(key,start,end) 返回key中start~end之间的元素, 包含end r.lrange('list',0,-1)
Out[52]: ['0', '1', '2', '3']
r.ltrim(key,start,end) 截取key, 保留索引为start至end的内容 r.ltrim('list',1,3)
Out[54]: True
r.lindex(key,index) 返回key的index位置的元素, 越界则没有返回值 r.lindex('list',2)
Out[58]: '3'
r.lset(key,index,value) 给key的index位置赋值, 越界则报错 r.lset('list',2,6)
Out[61]: True
r.lrem(key,count,value) 删除key中 count 个值为 value 的元素, 返回删除个数 r.lrem('list',2,6)
Out[64]: 1
r.lpop(key) 删除并返回key的首元素(左边) r.lpop('list')
Out[66]: '1'
r.rpop(key) 删除并返回key的尾元素(右边) r.rpop('list')
Out[68]: '2'
r.blpop(key,timeout=0) 删除并返回key的首元素, 如果key为空, 则会一直阻塞等待, 返回元组,(key,value) r.blpop('list')
Out[69]: ('list', '123')
r.brpop(key,timeout=0) 删除并返回key的尾元素, 如果key为空, 则会一直阻塞等待, 返回元组,(key,value) r.brpop('list')
Out[71]: ('list', '1')
r.rpoplpush(key,newkey) 删除并返回key的尾元素, 并将元素添加到, newkey的头部 r.rpoplpush('list','list1')
Out[73]: '2'

5.3.4 Set操作

语法 作用 示例
r.sadd(key,*values) 向key中添加元素, 可以添加多个, 返回插入元素个数 r.sadd('tags','Book','Tea')
Out[77]: 2
r.srem(key,*values) 从key中删除元素, 可以删除多个, 返回成功删除的个数 r.srem('tags','Book','Tea')
Out[78]: 2
r.spop(key) 随机删除并返回key中的一个元素 r.spop('tags')
Out[79]: 'Coffee'
r.smove(key,newkey,value) 从key中移除元素并添加到newkey中 r.smove('tags','news','Book')
Out[81]: True
r.scard(key) 返回key中的元素个数 r.scard('tags')
Out[82]: 2
r.sismember(key,value) 测试value是否在key中, 在返回True, 不在返回False r.sismember('tags','Tea')
Out[84]: True
r.sinter(keys, *args) 返回交集, 没有交集返回空集 r.sinter('tags','news')
Out[85]:
r.sinterstore(dset,keys,*args) 求交集, 并将交集保存到dset集合中, 返回dset元素个数 r.sinterstore('dset','tags','news')
Out[93]: 1
r.sunion(keys.*args) 返回并集 r.sunion('tags','tag2','tag3')
Out[97]:
r.sunionstore(dset,keys,*args) 求并集, 并将并集保存到dset中, 返回并集的元素个数 r.sunionstore('log','tags','news')
Out[99]: 3
r.sdiff(key,*args) 求差集, 并返回在key中, 但不在*args中的元素集合 r.sdiff('tags','news')
Out[100]:
r.sdiffstore(dset,key,*args) 求差集, 并将差集保存在dset中, 返回差集个数 r.sdiffstore('dset','tags','news')
Out[105]: 1
r.smembers(key) 返回key中所有元素 r.smembers('tags')
Out[107]:
r.srandmember(key) 随机返回key中的一个元素, 但不删除元素 r.srandmember('tags')
Out[108]: 'Coffee'

5.3.5 Sorted Set操作

语法 作用 示例
r.zadd(key,**kargs) 向key中添加元素, 如果元素已存在, 则更新其score r.zadd('grade',{'Bob':80,'Mike':61})
Out[7]: 2
r.zrem(key,*values) 删除key中的元素 r.zrem('grade','Mike','Bob')
Out[11]: 2
r.zincrby(key, amount=1,value,) 如果在key中已经存在元素value,则该元素的score增加amount,否则向该集合中添加该元素,其score的值为amount r.zincrby('grade',-2, 'Bob')
Out[13]: -2.0
r.zrank(key,value) 返回key中元素的排名下标 (按score从小到大) r.zrank('grade','Bob')
Out[18]: 1
r.zrevrank(key,value) 返回key中元素的倒数排名下标 (按score从大到小) r.zrevrank('grade','Bob')
Out[20]: 0
r.zrevrange(key,start,end, withscores=False) 返回key中的index从start到end的所有元素 (按score从大到小排序) r.zrevrange('grade',0,-1)
Out[21]: ['Bob', 'Mike']
r.zrangebyscore( key,min,max, start=None,
num=None, withscores=False)
返回key中score在min到max之间的元素 r.zrangebyscore('grade',60,90)
Out[27]: ['Kang', 'Mike', 'Bob']
r.zcount(key,min,max) 返回key中score在min到max之间的数量 r.zcount('grade',60,90)
Out[31]: 3
r.zcard(key) 返回key中元素个数 r.zcard('grade')
Out[34]: 4
r.zremrangebyrank( key,min,max) 删除并返回key中排名在min到max之间的元素个数 r.zremrangebyrank('grade',0,1)
Out[35]: 2
r.zremrangebyscore( key,min,max) 删除并返回key中score在给定区间的元素个数 r.zremrangebyscore('grade',60,90)
Out[36]: 1

5.3.5 Hash操作

语法 作用 示例
r.hset(key,field,value) 向key中添加映射, 如果已存在, 则更新, r.hset('price','cake',5)
Out[41]: 1
r.hsetnx(key,field,value) 向key中添加映射, 如果field不存在, 如果存在不更新 r.hsetnx('price','apple',5)
Out[45]: 1
r.hget(key, field) 返回key中映射对象的value r.hget('price','cake')
Out[48]: '6'
r.hmget(key,fields,*args) 返回key中各个映射对应的value r.hmget('price','cake','apple')
Out[53]: ['6', '5']
r.hmset(key,mapping) 向key中批量添加映射 r.hmset('price',{'orange':3,'banana':2})
Out[54]: True
r.hincrby(key,field, amount=1) 向key中映射的value增加amount r.hincrby('price','orange',2)
Out[56]: 5
r.hexists(key,field) 判断key中是否存在键名为field的映射 r.hexists('price','orange')
Out[57]: True
r.hdel(key,*fields) 删除key中field的映射 r.hdel('price','orange')
Out[60]: 1
r.hlen(key) 从key中获取映射个数 r.hlen('price')
Out[61]: 3
r.hkeys(key) 从key中获取所有映射键名 r.hkeys('price')
Out[62]: ['cake', 'apple', 'banana']
r.hvals(key) 从key中获取所有映射键值 r.hvals('price')
Out[63]: ['8', '5', '2']
r.hgetall(key) 从key中获取所有映射键值对 r.hgetall('price')
Out[64]:

RedisDump

  • redis-load

将数据导入到数据库中

  • redis-dump

将数据库信息导出

posted @ 2019-03-17 14:42  ☞Summer  阅读(224)  评论(0编辑  收藏  举报