python访问redis(二)

关于常用nosql数据库介绍及redis安装配置的介绍,点击python访问redis查看。
前面介绍了redis常用的数据类型,包括StringListHashSetSorted Set。下面针对不同数据类型的操作进行介绍。

String

  • set(name, value)
    设置值,默认不存在则创建,存在则修改
  • get(name)
    获取值

    1
    2
    3
    4
    5
    6
    7
    import redis

    pool = redis.ConnectionPool(host="118.24.18.158", port=6379)
    r = redis.Redis(connection_pool=pool)
    r.set("db", "oracle")
    print(r.get("db")) #输出结果:b'oracle'
    print(r.get("db").decode()) #输出结果:oracle
  • mset(args, *kwargs)
    批量设置值,传入参数为类型为dict

  • mget(keys, *args)
    批量获取key的值,传入参数类型为tuple
    1
    2
    r.mset(db1="oracle", db2="mysql", db3="redis")
    print(r.mget("db1", "db2", "db3")) #输出结果:[b'oracle', b'mysql', b'redis']

或者使用下面传递参数

1
2
r.mset({"db1": "oracle", "db2": "mysql", "db3": "redis"})
print(r.mget(["db1", "db2", "db3"])) #输出结果:[b'oracle', b'mysql', b'redis']

  • append(key, value)
    在key对应的value后面追加内容
    1
    2
    3
    4
    5
    r.set("db", "oracle")
    print(r.get("db")) #输出结果:b'oracle'
    r.append("db", " and ")
    r.append("db", "mysql")
    print(r.get("db")) #输出结果:b'oracle and mysql'

List

在redis中,list类型的存储按照一个name对应一个list来存储。

  • lpush(name, *values)
    左边添加
    1
    2
    3
    4
    r.lpush("db", "oracle")
    r.lpush("db", "mysql")
    r.lpush("db", "redis")
    print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'mysql', b'oracle']

或者可以如下

1
2
r.lpush("db", "oracle", "mysql", "redis")
print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'mysql', b'oracle']

  • rpush(name, *values)
    右边添加

    1
    2
    3
    4
    r.rpush("db", "oracle")
    r.rpush("db", "mysql")
    r.rpush("db", "redis")
    print(r.lrange("db", 0, -1)) #输出结果:[b'oracle', b'mysql', b'redis']
  • linsert(name, where, refvalue, value)
    根据where参数,在列表name的值refvalue前面或者后面插入值value,成功则返回值为新的列表的长度,否则返回-1。
    where取值为before或者after。

    1
    2
    3
    4
    5
    6
    r.lpush("db", "oracle")
    print(r.lrange("db", 0, -1)) #输出结果:[b'oracle']
    r.linsert("db", "after", "oracle", "mysql")
    print(r.lrange("db", 0, -1)) #输出结果:[b'oracle', b'mysql']
    r.linsert("db", "before", "mysql", "redis")
    print(r.lrange("db", 0, -1)) #输出结果:[b'oracle', b'redis', b'mysql']
  • lpop(name)
    删除列表name中的第一个元素,返回值为删除的元素

    1
    2
    3
    4
    r.lpush("db", "oracle", "mysql", "redis")
    print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'mysql', b'oracle']
    print(r.lpop("db")) #输出结果:b'redis'
    print(r.lrange("db", 0, -1)) #输出结果:[b'mysql', b'oracle']
  • lrange(name, start, end)
    通过分片返回list位于start和end范围的值

    1
    2
    3
    4
    5
    r.lpush("db", "oracle")
    r.lpush("db", "mysql")
    r.lpush("db", "redis")
    print(r.lrange("db", 0, 2)) #输出结果:[b'redis', b'mysql', b'oracle']
    print(r.lrange("db",0, 1)) #输出结果:[b'redis', b'mysql']
  • lset(name, index, value)
    修改list中指定位置的值

    1
    2
    3
    4
    r.lpush("db", "oracle", "mysql", "redis")
    print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'mysql', b'oracle']
    r.lset("db", 1, "nosql")
    print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'nosql', b'oracle']
  • lrem(name, value, num)
    删除列表name中最先出现的num个值为value的元素。
    num默认值为0,表示删除全部值为value的元素;
    num>0表示删除值为value的元素时从头到尾匹配;
    num>0表示删除值为value的元素时从尾到头匹配。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    r.lpush("db", "oracle", "mysql", "redis", "redis")
    print(r.lrange("db", 0, -1)) #输出结果:[b'redis', b'redis', b'mysql', b'oracle']
    r.lrem("db", "redis")
    print(r.lrange("db", 0, -1)) #输出结果:[b'mysql', b'oracle']
    r.lpush("db1", "oracle", "redis", "mysql", "redis", "redis")
    print(r.lrange("db1", 0, -1)) #输出结果:[b'redis', b'redis', b'mysql', b'redis', b'oracle']
    r.lrem("db1", "redis", 1)
    print(r.lrange("db1", 0, -1)) #输出结果:[b'redis', b'mysql', b'redis', b'oracle']
    r.lpush("db2", "oracle", "redis", "mysql", "redis", "redis")
    print(r.lrange("db2", 0, -1)) #输出结果:[b'redis', b'redis', b'mysql', b'redis', b'oracle']
    r.lrem("db2", "redis", -2)
    print(r.lrange("db2", 0, -1)) #输出结果:[b'redis', b'mysql', b'oracle']

Set

Set集合就是不允许重复元素的列表。

  • sadd(name, *values)
    集合name中添加值。
  • scard(name)
    返回集合name中元素的数量。
  • smembers(name)
    返回集合的所有成员。

    1
    2
    3
    r.sadd("dbset", "oracle", "mysql", "redis")
    print(r.scard("dbset")) #输出结果:3
    print(r.smembers("dbset")) #输出结果:{b'mysql', b'redis', b'oracle'}
  • spop(name)
    随机删除并返回集合name中的一个元素。

    1
    2
    3
    4
    r.sadd("dbset", "oracle", "mysql", "redis")
    print(r.smembers("dbset")) #输出结果:{b'redis', b'oracle', b'mysql'}
    print(r.spop("dbset")) #输出结果:b'mysql'
    print(r.smembers("dbset")) #输出结果:{b'oracle', b'redis'}
  • srem(name, *values)
    从集合name中删除指定的值。

    1
    2
    3
    4
    r.sadd("dbset", "oracle", "mysql", "redis")
    print(r.smembers("dbset")) #输出结果:{b'oracle', b'redis', b'mysql'}
    r.srem("dbset", "mysql", "redis")
    print(r.smembers("dbset")) #输出结果:{b'oracle'}
  • sunion(keys, *args)
    返回多个集合的并集

    1
    2
    3
    4
    r.sadd("set1", "1", "2", "3")
    r.sadd("set2", "2", "3", "4")
    r.sadd("set3", "3", "4", "5")
    print(r.sunion("set1", "set2", "set3")) #输出结果:{b'5', b'2', b'3', b'1', b'4'}
  • sinter()
    返回多个集合的交集

    1
    2
    3
    4
    r.sadd("set1", "1", "2", "3")
    r.sadd("set2", "2", "3", "4")
    r.sadd("set3", "3", "4", "5")
    print(r.sinter("set1", "set2", "set3")) #输出结果:{b'3'}

Zset

Zset也就是sorted Set,有序集合。在集合的基础上元素的排序根据另外一个值进行比较。所以有序集合每个元素有2个值,即值和分数,分数专门用来做排序。

  • zadd(name, args, *kwargs)
    集合添加元素,下面两种写法是等价的。

    1
    2
    r.zadd("dbset", "oracle", 1, "redis", 3, "mysql", 2)
    r.zadd("dbset", oracle=1, redis=3, mysql=2)
  • zcard(name)
    有序集合中名称为name的元素个数。

  • zrange(name, start, end)
    返回有序集合name中位于start和end之间的元素,默认为升序排列。

    1
    2
    3
    r.zadd("dbset", "oracle", 1, "redis", 3, "mysql", 2)
    print(r.zrange("dbset", 0, -1)) #输出结果:[b'oracle', b'mysql', b'redis']
    print(r.zcard("dbset")) #输出结果:3
  • zrem(name, *values)
    删除有序集合name中的值。

    1
    2
    3
    r.zadd("dbset", oracle=1, redis=3, mysql=2)
    r.zrem("dbset", "oracle")
    print(r.zrange("dbset", 0, -1)) #输出结果:[b'mysql', b'redis']

Hash

redis中的Hash在内存中类似于一个name对应一个dict来存储。

  • hset(name, key, value)
    名称为name的hash中,将key的值设置为value。
    若成功添加则返回1,否则返回0.
  • hget(name, key)
    在名称的name的hash中,返回key的对应值。

    1
    2
    r.hset("dbhash", "db1", "oracle")
    print(r.hget("dbhash", "db1")) #输出结果:b'oracle'
  • hmset(name, mapping)
    名称为name的hash中,根据mapping字典内容添加对应的key和value。

  • hmget(name, keys, *args)
    名称为name的hash中获取多个keys的值。

    1
    2
    r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
    print(r.hmget("dbhash", "db1", "db2")) #输出结果:[b'oracle', b'mysql']
  • hkeys(name)
    列表形式返回名称为name的hash中的keys。

    1
    2
    r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
    print(r.hkeys("dbhash")) #输出结果:[b'db1', b'db2']
  • hvals()
    列表形式返回名称为name的hash中的values。

    1
    2
    r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
    print(r.hvals("dbhash")) #输出结果:[b'oracle', b'mysql']
  • hexists(name, key)
    名称为name的hash中是否存在key。返回值为布尔值。

    1
    2
    3
    r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
    print(r.hexists("dbhash", "db1")) #输出结果:True
    print(r.hexists("dbhash", "db3")) #输出结果:False
  • hdel(name, keys)
    删除名称为name的hash中的keys。

    1
    2
    3
    r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
    print(r.hdel("dbhash", "db1")) #输出结果:1
    print(r.hkeys("dbhash")) #输出结果:[b'db2']
  • hlen(name)
    返回名称为name的hash中元素的个数。

    1
    2
    r.hmset("dbhash", {"db1": "oracle", "db2": "mysql"})
    print(r.hlen("dbhash")) #输出结果:2

其它常用操作

下面的操作适用于上述所有类型

  • keys(pattern=’*’)
    返回匹配pattern的key。

    1
    2
    3
    4
    r.set("dbset", 1)
    r.set("dbstr", 2)
    r.set("int", 3)
    print(r.keys(pattern='db*')) #输出结果:[b'dbstr', b'dbset']
  • delete(names)
    删除
    name指定的一个或多个keys。

    1
    2
    3
    4
    5
    r.set("dbset", 1)
    r.set("dbstr", 2)
    r.set("int", 3)
    print(r.delete("dbset", "dbstr"))
    print(r.keys())
  • exists(name)
    判断key为name是否存在。返回值为布尔值。

    1
    2
    3
    r.set("dbset", 1)
    print(r.exists("dbset")) #输出结果:True
    print(r.exists("dbstr")) #输出结果:False
  • rename(src, dst)
    修改key的名称,修改成功返回True,否则返回错误。

    1
    2
    3
    r.set("dbset", 1)
    print(r.rename("dbset", "db")) #输出结果:True
    print(r.keys()) #输出结果:[b'db']
  • expire(name, time)
    设置key的过期时间。

  • type()
    返回key所存储值的类型。

    1
    2
    3
    4
    r.set("dbset", 1)
    print(r.type("dbset")) #输出结果:b'string'
    r.zadd("dbset1", oracle=1, redis=3, mysql=2)
    print(r.type("dbset1")) #输出结果:b'zset'
  • move(name, db)
    将key为name的元素迁移至db。

    1
    2
    r.set("dbset", "dbstr")
    print(r.move("dbset", 1)) #输出结果:True
  • flushall()
    删除所有的key。

Recommended Posts