Python操作Redis大全


Python操作Redis大全文章插图
来源: 廖高祥 链接:
一、字符串 strings
Python操作Redis的redis模块对字符串(string)的主要操作函数包括:SET、GET、GETSET、SETEX、SETNX、MSET、MSETNX、INCR(INCRBY,DECR,DECRBY在python中庸同一个函数incr实现)、APPEND、SETRANGE、STRLEN 。 函数说明如下:

  1. SET: 为指定的键(key)设置值(value) ,set(self, name, value, **kwargs) 。
  2. GET:获取指定键(key)绑定的值(value) , get(self, name) 。
  3. GETSET:为指定的键(key)设置新的值(value) , 并返回旧的值(old Value) , getset(self, name, value)
  4. SETEX:为指定的键(key)设置过期以秒(second)计的过期时间 , setex(self, name, value, time)
  5. SETNX:键(key)不存在时 , 为键(key)指定值(value) , setnx(self, name, value)
  6. MSET:一次性设置多个键-值(key-value)对,函数设置的键-值对(即mapping所指内容)数据要以Python字典数据类型传入 , mset(self, mapping)
  7. MSETNX:键-值(key-value)对不存在时 , 设置键-值(key-value)对,msetnx(self, mapping) , mapping值参考6
  8. INCR:自增函数 , 默认步长为1 , 通过对步长(amount)大小以及字符的控制实现了INCRBY(amount>=1)、DECR(amount=-1)、DECRBY(amount<=-1)等函数功能 , incr(self, name, amount=1)
  9. APPEND:为指定的字符串追加值 , 若不存在则直接创建 , append(self, key, value)
  10. SETRANGE:用 value 参数覆写给定 key 所储存的字符串值 , 从偏移量 offset 开始 , setrange(self, name, offset, value)
  11. STRLEN:返回字符串的长度 , 当name不存在时返回0 , strlen(self, name)
示例代码如下:
#!/usr/bin/python# -*- coding:utf-8 -*-# __author__ = 'Jack'pool = redis.ConnectionPool(host='127.0.0.1', port=6379)r = redis.Redis(connection_pool=pool)r.flushall # 清空Redisr.setex('name', value='http://kandian.youth.cn/index/liaogx', time=2) # 设置新值 , 过期时间为3sr.mset(k1 = 'v1', k2 = 'v2', k3 = 'v3') # 批量设置新值print(r.mget('k1', 'k2', 'k3', 'k4')) # 批量获取新值print(r.getset('name', 'liaogaoxiang')) # 设置新值并获取原来的值print(r.getrange('name', 0, 1)) # 获取子序列 0 <= x <= 1r.setrange('name', 0, 'LIAO') # 修改字符串内容 , 从指定字符串索引开始向后替换(新值太长时 , 则向后添加) , 返回值的长度i = 0while i < 4:print(r.get('name'))time.sleep(1)i += 1source = 'foo'r.set('n1', source)r.setbit('n1', 7, 1)'''注:如果在Redis中有一个对应: n1 = "foo" , 那么字符串foo的二进制表示为:01100110 01101111 01101111所以 , 如果执行 setbit('n1', 7, 1) , 则就会将第7位设置为1 , 那么最终二进制则变成 01100111 01101111 01101111 , 即:"goo"'''print(r.get('n1'))print(r.getbit('n1', 7)) # 获取n1对应的值的二进制表示中的某位的值 (0或1)r.set('n2', '廖高祥')print(r.strlen('n2')) # 返回对应的字节长度(一个汉字3个字节)r.set('num', 1)r.incr('num', amount=10)r.decr('num', amount=1)print(r.get('num')) # 自增num对应的值 , 当name不存在时 , 则创建name=amount , 否则 , 则自增 。 r.append('num', 111)print(r.get('num')) # 在redis num对应的值后面追加内容输出结果如下:
[b'v1', b'v2', b'v3', None]b'liaogx'b'li'b'LIAOgaoxiang'b'LIAOgaoxiang'b'LIAOgaoxiang'b'LIAOgaoxiang'b'goo'19b'10'b'10111'