redis是一个很常见的键值对数据库,用途广泛,我现在主要是在实现增量爬虫的时候使用了redis中的hashes类型,这里记录一些redis的相关操作。
一、字符串 strings
Python操作Redis的redis模块对字符串(string)的主要操作函数包括:SET、GET、GETSET、SETEX、SETNX、MSET、MSETNX、INCR(INCRBY,DECR,DECRBY在python中庸同一个函数incr实现)、APPEND、SETRANGE、STRLEN。函数说明如下:
- SET: 为指定的键(key)设置值(value), set(self, name, value, **kwargs)。
 - GET:获取指定键(key)绑定的值(value),get(self, name)。
 - GETSET:为指定的键(key)设置新的值(value),并返回旧的值(old Value),getset(self, name, value)
 - SETEX:为指定的键(key)设置过期以秒(second)计的过期时间,setex(self, name, value, time)
 - SETNX:键(key)不存在时,为键(key)指定值(value),setnx(self, name, value)
 - MSET:一次性设置多个键-值(key-value)对,函数设置的键-值对(即mapping所指内容)数据要以Python字典数据类型传入,mset(self, mapping)
 - MSETNX:键-值(key-value)对不存在时,设置键-值(key-value)对,msetnx(self, mapping),mapping值参考6
 - INCR:自增函数,默认步长为1,通过对步长(amount)大小以及字符的控制实现了INCRBY(amount>=1)、DECR(amount=-1)、DECRBY(amount<=-1)等函数功能,incr(self, name, amount=1)
 - APPEND:为指定的字符串追加值,若不存在则直接创建,append(self, key, value)
 - SETRANGE:用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始,setrange(self, name, offset, value)
 - STRLEN:返回字符串的长度,当name不存在时返回0,strlen(self, name)
 
示例代码如下:
1  | #!/usr/bin/python  | 
输出结果如下:
1  | [b'v1', b'v2', b'v3', None]  | 
二、列表 lists
Python操作Redis主要利用了redis模块来实现,list表操作函数主要模拟了Redis操作命令LPUSH,LRANGE,LINDEX,BLPOP,BRPOP。函数说明如下:
- lpush函数实现了从向指定redis列表头部压入数据功能,lpush key value
 - lrange获取列表指定范围的函数,lrange key start end
 - lindex根据列表下标量获取列表元素值, lindex key index
 - blpop从列表头部取出第一个元素,返回该元素值并从列表删除(l代表left,左边)
 - brpop从列表尾部取出第一个元素,返回该元素值并从列表删除(r代表right,右边)
 - LPUSHX、RPUSHX以及其他一些Redis列表(List)函数目前版本无法实现,如有可实现方法博客代码事例将会得到更新。
 
示例代码如下:
1  | #!/usr/bin/python  | 
输出结果如下:
1  | 2  | 
三、集合 sets
Redis 数据库集合对象(set object)是由string类型的无重复元素的无需集合,底层编码可以是intset或者hashtable。intset编码的集合对象用整数集合最为底层实现,所有对象元素保存在整数集合中。Python的redis模块实现了 SADD、SCARD 、SDIFF 、SDIFFSTORE、SINTER 、SINTERSTORE、SISMEMBER 、SMEMBERS 、SMOVE、SPOP、SRANDMEMBER、SREM、SUNION、SUNIONSTORE操作命令的基本用法。函数说明如下:
- SADD:向集合对象添加成员,sadd(self, name, value)
 - SCARD:获取集合元素个数,scard(self, name)
 - SDIFF:返回给定多个集合对象的差集(set key1-set key2…-set keyn),从左到右计算集合差集,sdiff(self, keys, *args)
 - SDIFFSTORE:返回给定给定多个集合对象的差集并存储在目标(dest)集合中,sdiffstore(self, dest, keys, *args)
 - SINTER:返回给定所有集合(keys, args)的交集, sinter(self, keys, args)
 - SINTERSTORE:返回给定所有集合(keys, args)的交集并存储在 集合(dest) 中, sinterstore(self, dest, keys, args)
 - SISMEMBER:判断 value元素是否是集合 name 的成员,返回布尔逻辑值True或者False,sismember(self, name, value)
 - SMEMBERS:返回集合中所元素值的Python集合类型数据,smembers(self, name)
 - SMOVE:将元素value从集合src移动到 集合 dest。若元素value在集合src中不存在,则集合dest中不会添加元素value, smove(self, src, dest, value)
 - SPOP:移除并返回集合中的一个随机元素, spop(self, name)
 - SRANDMEMBER:返回集合中一个随机数,但是不做移除操作, srandmember(self, name)。从Redis 2.6 版本开始, 在命令行下Srandmember 命令接受可选返回元素数量的参数 redis>SRANDMEMBER name count
 - SREM:移除集合中一个元素,srem(self, name, value),redis模块任然沿用Redis 2.4 版本以前的只接受单个元素的用法。
 - SUNION:返回所有给定集合的并集中所有元素,sunion(self, keys, *args)
 - SUNIONSTORE:所有给定集合的并集存储在集合dest 中, sunionstore(self, dest, keys, *args)
 - SSCAN:迭代集合中的元素,sscan(self, name, cursor=0, match=None, count=None)
 
示例代码如下:
1  | #!/usr/bin/python  | 
输出结果如下:
1  | 
  | 
四、有序集合 sorted sets
| 命令 | 描述 | 
|---|---|
| Redis Zadd 命令 | 向有序集合添加一个或多个成员,或者更新已存在成员的分数 | 
| Redis Zcard 命令 | 获取有序集合的成员数 | 
| Redis Zcount 命令 | 计算在有序集合中指定区间分数的成员数 | 
| Redis Zincrby 命令 | 有序集合中对指定成员的分数加上增量 increment | 
| Redis Zinterstore 命令 | 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中 | 
| Redis Zlexcount 命令 | 在有序集合中计算指定字典区间内成员数量 | 
| Redis Zrange 命令 | 通过索引区间返回有序集合成指定区间内的成员 | 
| Redis Zrangebylex 命令 | 通过字典区间返回有序集合的成员 | 
| Redis Zrangebyscore 命令 | 通过分数返回有序集合指定区间内的成员 | 
| Redis Zrank 命令 | 返回有序集合中指定成员的索引 | 
| Redis Zrem 命令 | 移除有序集合中的一个或多个成员 | 
| Redis Zremrangebylex 命令 | 移除有序集合中给定的字典区间的所有成员 | 
| Redis Zremrangebyrank 命令 | 移除有序集合中给定的排名区间的所有成员 | 
| Redis Zremrangebyscore 命令 | 移除有序集合中给定的分数区间的所有成员 | 
| Redis Zrevrange 命令 | 返回有序集中指定区间内的成员,通过索引,分数从高到底 | 
| Redis Zrevrangebyscore 命令 | 返回有序集中指定分数区间内的成员,分数从高到低排序 | 
| Redis Zrevrank 命令 | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 | 
| Redis Zscore 命令 | 返回有序集中,成员的分数值 | 
| Redis Zunionstore 命令 | 计算给定的一个或多个有序集的并集,并存储在新的 key 中 | 
| Redis Zscan 命令 | 迭代有序集合中的元素(包括元素成员和元素分值) | 
示例代码如下:
1  | #!/usr/bin/python  | 
输出结果如下:
1  | 
  | 
五、哈希 hashes
Redis 数据库hash数据类型是一个string类型的key和value的映射表,适用于存储对象。redis 中每个hash可以存储键值对多达40亿。Python的redis模块实现了Redis哈希(Hash)命令行操作的几乎全部命令,包括HDEL、HEXISTS、HGET、HGETALL、HINCRBY、HKEYS、HLEN 、HMGET 、HMSET 、HSET 、HSETNX 、HVALS 、HINCRBYFLOAT等命令。函数说明如下:
- HDEL:删除对应哈希(Hash)表的指定键(key)的字段,hdel(self, name, key)
 - HEXISTS:检测哈希(Hash)表对应键(key)字段是否存在,返回布尔逻辑,hexists(self, name, key)
 - HGET:获取哈希(Hash)指定键(key)对应的值,hget(self, name, key)
 - HGETALL:获取哈希(Hash)表的键-值对(key-value pairs),返回python字典类型数据,hgetall(self, name)
 - HINCRBY:为哈希表(Hash)指定键(key)对应的值(key)加上指定的整数数值(int,可为负值)hincrby(self>, name, key, amount=1),Redis 中本操作的值被限制在 64 位(bit)有符号数字。
 - HKEYS:返回哈希表(Hash)对应键(key)的数组(Python称之为列表List),hkeys(self, name)
 - HLEN: 获取哈希表(Hash)中键-值对(key-value pairs)个数,hlen(self, name)
 - HMGET:获取哈希表(Hash)中一个或多个给点字段的值,不存在返回nil(Redis命令行)/None(Python),hmget(self, name, keys),其中keys可以为列表(list)
 - HMSET:设置对个键-值对(key-value pairs)到哈希表(Hash)中,python输入值(mapping)为字典(dictionary)类型,hmset(self, name, mapping)
 - HSET:为哈希表(Hash)赋值,若键(key)存在值(value)则覆盖,不存在则创建,hset(self, name, key, value)
 - HSETNX:为哈希表(Hash)不存值(value)的键(key)赋值,存在操作无效,对应值(value)无变化,hsetnx(self, name, key, value)
 - HVALS:返回哈希表(Hash)对应值(value)的列表,hvals(self, name)
 - HINCRBYFLOAT:为哈希表 key 中的指定字段的浮点数值加上增量 increment ,hincrbyfloat(self, name, key, amount=1.0)
 
示例代码如下:
1  | #!/usr/bin/python  | 
输出结果如下:
1  | b'v1'  |