Python 操作 Redis

字符串 String

PYTHON对于字符串的主要操作函数包括:SET, GET, GETSET, SETNX, MSET, MSEINX, INCR(INCRBY, DECR, DECRBY), APPEND, SETRANGE, STRLEN。

  1. SET:为指定的键(key)设定值(value),set(self, name, value, **kwargs)。

  2. GET:获取指定键(key)的值(value),get(self, name)。

  3. GETSET:为指定的键设置新的值,并返回旧的值,getset(self, name, value)。

  4. SETEX:为指定的键设置过期时间(以秒计),setex(self, name, value, time)。

  5. MSET:一次性设置多个键值对,函数设置的键值对(即mapping所指向的内容)数据以python字典数据类型传入,mset(self, mapping).

  6. MSETNX:键值对不存在时,设置键值对, msetnx(self, mapping)。

  7. INCR:自增函数,默认步长为1,通过对步长(amount)大小及字符的控制实现INCRBY(amount>=1)。

  8. APPEND:未指定的字符串追加值,若==不存在则直接创建==,append(self, key, value)

  9. SETRANGE:用value参数覆写给定的key所存储的字符串值,从偏移量offset开始,setrange(self, name, offset, value)。

  10. STRLEN:返回字符串的长度,当name不存在时返回0,strlen(self, name)。

    实例代码如下:

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    # __author__ = 'Xin'
    import redis
    
    pool = redis.ConnectionPool(host='119.28.9.229', port=6379)
    r = redis.Redis(connection_pool=pool)
    r.flushall()
    
    # 设置新值,过期时间5s
    r.setex('name', value='xin', time=5)
    # 批量设置新值
    r.mset(k1='v1', k2='v2', k3='v3')
    # 批量获取值
    print(r.mget('k1', 'k2', 'k3'))
    # 设置新值并返回原来的值
    print(r.getset('name', 'hao'))
    # 获取子序列(0<=x<=1)
    print(r.getrange('name', 0, 1))
    # 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加),返回值的长度
    r.setrange('name', 0, 'ye')
    
    source = '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'))
    # 获取n1对应的值的二进制表示中的某位的值 (0或1)
    print(r.getbit('n1', 7))
    r.set('n2', '汉字char')
    # 返回对应的字节长度(一个汉字3个字节)
    print(r.strlen('n2'))
    
    r.set('num', 1)
    # 自增,步长为10
    r.incr('num', amount=10)
    # 自减,步长为1
    r.decr('num', amount=1)
    # 自增num对应的值,当name不存在时,则创建name=amount,否则,则自增。
    print(r.get('num'))
    # 在redis num对应的值后面追加内容
    r.append('num', 111)
    print(r.get('num'))
    
    结果:
    [b'v1', b'v2', b'v3']
    b'xin'
    b'ha'
    b'goo'
    1
    10
    b'10'
    b'10111'

列表 List

Python操作redis主要的操作命令时LPUSH, LRANGE, LINDEX, BLPOP, BRPOP。函数说明如下:

  1. lpush函数实现从向指定redis列表头部压入数据的功能, lpush key value。

  2. lrange获取列表指定范围内的数据, lrange key start end。

  3. linde根据列表的下标获取列表元素的值,lindex key index。

  4. blpop从列表头部取出第一个元素,返回该元素并从列表中删除(l表示left)。

  5. brpop从列表尾部取出第一个元素,返回该元素并从列表中删除(r表示right)。

  6. LPUSHX、RPUSHX以及其他一些Redis列表(List)函数目前版本无法实现。

    实例代码如下:

集合 sets

集合对象是由string类型的无重复元素的集合,底层编码是intset或者hashtable。inset编码的集合对象用整数集合最为底层实现,所有对象元素保存在整数集合中。Python的redis模块实现了 SADD、SCARD 、SDIFF 、SDIFFSTORE、SINTER 、SINTERSTORE、SISMEMBER 、SMEMBERS 、SMOVE、SPOP、SRANDMEMBER、SREM、SUNION、SUNIONSTORE操作命令的基本用法。函数说明如下:

  1. *SADD:向集合对象添加成员,sadd(self, name, value)

  2. SCARD:获取集合元素个数,scard(self, name)

  3. SDIFF:返回给定多个集合对象的差集(set key1-set key2..-set keyn),从左到右计算集合差集,sdiff(self, keys, *args)

  4. SDIFFSTORE:返回给定给定多个集合对象的差集并存储在目标(dest)集合中,sdiffstore(self, dest, keys, *args)

  5. SINTER:返回给定所有集合(keys, args)的交集, sinter(self, keys, args)

  6. SINTERSTORE:返回给定所有集合(keys, args)的交集并存储在 集合(dest) 中, sinterstore(self, dest, keys, args)

  7. SISMEMBER:判断 value元素是否是集合 name 的成员,返回布尔逻辑值True或者False,sismember(self, name, value)

  8. SMEMBERS:返回集合中所元素值的Python集合类型数据,smembers(self, name)

  9. SMOVE:将元素value从集合src移动到 集合 dest。若元素value在集合src中不存在,则集合dest中不会添加元素value, smove(self, src, dest, value)

  10. SPOP:移除并返回集合中的一个随机元素, spop(self, name)

  11. SRANDMEMBER:返回集合中一个随机数,但是不做移除操作, srandmember(self, name)。从Redis 2.6 版本开始, 在命令行下Srandmember 命令接受可选返回元素数量的参数 redis>SRANDMEMBER name count

  12. SREM:移除集合中一个元素,srem(self, name, value),redis模块任然沿用Redis 2.4 版本以前的只接受单个元素的用法。

  13. SUNION:返回所有给定集合的并集中所有元素,sunion(self, keys, *args)

  14. SUNIONSTORE:所有给定集合的并集存储在集合dest 中, sunionstore(self, dest, keys, *args)

  15. SSCAN:迭代集合中的元素,sscan(self, name, cursor=0, match=None, count=None)

    实例代码如下:

有序集合 sorted sets

命令

描述

向有序集合添加一个或多个成员,或者更新已存在成员的分数

获取有序集合的成员数

计算在有序集合中指定区间分数的成员数

有序集合中对指定成员的分数加上增量 increment

计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

在有序集合中计算指定字典区间内成员数量

通过索引区间返回有序集合成指定区间内的成员

通过字典区间返回有序集合的成员

通过分数返回有序集合指定区间内的成员

返回有序集合中指定成员的索引

移除有序集合中的一个或多个成员

移除有序集合中给定的字典区间的所有成员

移除有序集合中给定的排名区间的所有成员

移除有序集合中给定的分数区间的所有成员

返回有序集中指定区间内的成员,通过索引,分数从高到底

返回有序集中指定分数区间内的成员,分数从高到低排序

返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序

返回有序集中,成员的分数值

计算给定的一个或多个有序集的并集,并存储在新的 key 中

迭代有序集合中的元素(包括元素成员和元素分值)

实例代码如下:

哈希 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等命令。函数说明如下:

  1. HDEL:删除对应哈希(Hash)表的指定键(key)的字段,hdel(self, name, key)

  2. HEXISTS:检测哈希(Hash)表对应键(key)字段是否存在,返回布尔逻辑,hexists(self, name, key)

  3. HGET:获取哈希(Hash)指定键(key)对应的值,hget(self, name, key)

  4. HGETALL:获取哈希(Hash)表的键-值对(key-value pairs),返回python字典类型数据,hgetall(self, name)

  5. HINCRBY:为哈希表(Hash)指定键(key)对应的值(key)加上指定的整数数值(int,可为负值)hincrby(self>, name, key, amount=1),Redis 中本操作的值被限制在 64 位(bit)有符号数字。

  6. HKEYS:返回哈希表(Hash)对应键(key)的数组(Python称之为列表List),hkeys(self, name)

  7. HLEN: 获取哈希表(Hash)中键-值对(key-value pairs)个数,hlen(self, name)

  8. HMGET:获取哈希表(Hash)中一个或多个给点字段的值,不存在返回nil(Redis命令行)/None(Python),hmget(self, name, keys),其中keys可以为列表(list)

  9. HMSET:设置对个键-值对(key-value pairs)到哈希表(Hash)中,python输入值(mapping)为字典(dictionary)类型,hmset(self, name, mapping)

  10. HSET:为哈希表(Hash)赋值,若键(key)存在值(value)则覆盖,不存在则创建,hset(self, name, key, value)

  11. HSETNX:为哈希表(Hash)不存值(value)的键(key)赋值,存在操作无效,对应值(value)无变化,hsetnx(self, name, key, value)

  12. HVALS:返回哈希表(Hash)对应值(value)的列表,hvals(self, name)

  13. HINCRBYFLOAT:为哈希表 key 中的指定字段的浮点数值加上增量 increment ,hincrbyfloat(self, name, key, amount=1.0)

示例代码如下:

Python操作Redis大全

Last updated

Was this helpful?