自学Python第二十四天- redis 库

自学Python第二十四天- redis 库


redis 库是 python 专门操作 Redis 数据库的第三方库

redis 的安装和引用

安装 redis

pip install redis

引用 redis

import redis

连接到数据库

直接连接到数据库

# 创建数据库对象,连接数据库
client = redis.Redis(host='127.0.0.1', port=6379, password='123456', db=1)

使用连接池

使用连接池管理 redis 的连接,可以避免每次建立、释放连接的开销。

# 创建连接池
pool = redis.ConnectionPool(host='127.0.0.1', port=6379, db=1, max_connections=100, password='123456', decode_responses=True)
# 创建数据库对象,使用连接池管理
client = redis.Redis(connection_pool=pool)

数据库操作

redis 库没有直接切换数据库的功能,操作另一个数据库里的数据需要新建连接并指定数据库。

redis 不支持数据库切换,redis 也没有表结构等概念,所以 redis 没有对数据库的相关操作。

关于数据操作

redis 大部分的数据操作命令都可以作为 python 的 redis 库的方法进行使用。这里只列举一些常用方法。

通用数据操作

删除操作

方法 delete 能够删除若干个 key 及其 value,返回值是成功操作的记录个数,如果 key 不存在则忽略

res = client.delete(key, [key ...])

修改操作

方法 rename 能够修改 key 为 newkey,如果 newkey 存在则覆盖其 value,返回布尔值表示是否成功

res = client.rename(key, newkey)

查询操作

方法 exists 判断 key 是否存在,返回布尔值

res = client.exists(key)

方法 randomkey 能够随机返回一个数据库中存在的 key,如果没有则返回空

res = client.randomkey()

方法 type 能够返回某个键的数据类型,如果没有该 key 则返回空

res = client.type(key)

其他操作

方法 move 能够将 key 及其对应 value 移动到另一个数据库中,返回值为布尔值表示是否成功

res = client.move(key, db)

方法 expire 能够修改 key 的生存时间,成功返回1,否则返回0

res = client.expire(key, seconds)

方法 ttl 能够查询键的生存时间,如果没有键则返回空

res = client.ttl(key)

字符串数据操作

添加数据

1. set 添加(设置)单个键值对

如果没有相应的 key 则添加,如果有 key 则覆盖其值

res = client.set(name, value, ex=None, px=None, nx=False, xx=False)

  • name: 键 key
  • value: 值 value
  • ex:过期时间(秒),时间到了后redis会自动删除
  • px:过期时间(毫秒),时间到了后redis会自动删除。ex、px二选一即可
  • nx:如果设置为True,则只有name不存在时,当前set操作才执行
  • xx:如果设置为True,则只有name存在时,当前set操作才执行
  • res: 返回值为是否操作成功

2. mset 添加(设置)多个键值对

如果没有相应的 key 则添加,如果有 key 则覆盖其值,此操作为原子操作,返回值为是否操作成功

data_dict = {
	key1 : value1,
	key2 : value2
}
res = client.mset(data_dict)

修改数据

1. setrange 根据索引修改值

res = client.setrange(name, offset, value)

  • name: 键 key
  • value: 修改的字符或字符串,修改位数根据 value 的长度从 offset 向后顺延
  • offset: 偏移量,即字符串索引(下标),从0开始
  • res: 返回修改后字符串长度

2. incr / decr 值自增/自减

值必须是整形或字符串型数值,否则会报错。默认增减量为 1,没有键则添加一个值为 0 的键,返回值为修改后的值

res = client.incr(key)
res = client.decr(key, 1)
res = client.incr(key, ‘4’)

3. incrbyfloat 值自增浮点数

incr 的浮点数版,需注意的是没有 decrbyfloat

res = client.incrbyfloat(key, 1.0)

4. append 字符串追加

在现有值后追加字符串,返回修改后字符串的长度

res = client.append(key, value)

查询数据

1. get 获取单个键的值

返回值为键对应的值,如果没有键则返回空

res = client.get(key)

2. mget 获取多个键的值

返回值为各键对应的值,如果没有键则对应的值返回空

res = client.mget(key1, key2)
res = client.mget([key1, key2])

3. getset 设置新值并返回旧值

如果没有键,则设置新值并返回空

res = client.getset(key, value)

4. getrange 根据索引获取键的部分值

start、end 表示开始和结束时候的索引,从0开始,左右闭合,越界忽略。如果完全越界或没有键则返回空

res = client.getrange(key, start, end)

5. strlen 获取值的长度

返回值的长度,如果没有键则返回0

res = client.strlen(key)

哈希表数据操作

添加数据

1. hset 添加/设置一个哈希表中的键值对

返回值为成功添加的数据个数(当使用 mapping 添加多个数据时)

res = client.hset(name, key, value)

2. hmset 添加/设置多个哈希表中的键值对

返回值为是否成功,mapping 是字典

res = client.hmset(name, mapping)

删除数据

1. hdel 删除哈希表中的键值对

返回删除的个数,没有的键将被忽略

res = client.hdel(name, keys)

修改数据

1. hincrby 自增哈希表中 key 对应的值(必须整数数值)

返回自增后的数值,若没有 key 则创建,且值为0,然后自增。

res = client.hincrby(name, key, amount=1)

2. hincrbyfloat hincrby 的小数版

res = client.hincrby(name, key, amount=1.0)

查询数据

1. hget 获取一个哈希表中的键的数据

res = client.hget(name, key)

2. hmget 获取多个哈希表中的键的数据

keys 可以是若干键名或键名组成的列表

res = client.hmget(name, keys)

3. hgetall 获取哈希表中所有的键值对

返回的是一个字典

res = client.hgetall(name)

4. hlen 获取哈希表的长度(键值对数量)

res = client.hlen(name)

5. hkeys 获取哈希表中所有的键

返回一个键名列表

res = client.hkeys(name)

6. hvals 获取哈希表中所有键的值

返回一个值列表

res = client.hvals(name)

7. hexists 检查哈希表中是否存在某个键

返回布尔值

res = client.hexists(name, key)

列表数据操作

添加数据

1. lpush / rpush 从左/右测添加元素

返回值是新列表长度

res = client.lpush(key, value [value …])
res = client.rpush(key, value [value …])

需注意的是使用 lpush 添加多个元素时,因为是以从左到右的顺序逐一从左到右往列表中添加(即最先添加的在最里面),所以顺序是反的。

2. lpushx / rpushx 从左/右侧添加元素都已存在的列表

返回值是新列表长度,需注意的是一次只能添加一个元素

res = client.lpushx(key, value)
res = client.rpushx(key, value)

3. linsert 在给定值前/后插入数据

返回值是新列表长度,如果是 -1 则是没找到 refvalue

res = client.linsert(name ,where, refvalue, value)

  • name :键名 key
  • where : 位置,BEFORE (前) 或 AFTER (后)
  • refvalue : 指定值
  • value : 插入的数据

删除数据

1. lren 删除列表中N个相同的值

返回值为删除的个数

res = lrem(name, value, num=0)

  • name : 键名 key
  • value : 需删除的值
  • num : 删除的个数,正数表示从左往右删,负数表示从右往左删,0表示删除所有。

2. ltrim 删除索引范围外的所有值

返回是否成功

res = client.ltrim(key, start, end)

修改数据

1. lset 根据索引修改值

返回是否修改成功

res = clinet.lset(key, index, value)

查询数据

1. llen 查询列表长度

res = client.llen(key)

2. lindex 根据索引获取数据

res = client.lindex(key, index)

3. lrange 根据索引区间获取数据

区间以偏移量 start 和 stop 指定,超出区间可能取不到值,但是不会出错。start 和 stop 是索引(下标),从 0 开始,可以使用负数下标,即最后一个元素为 -1。取值使用左右闭合的原则,和 python 的左闭右开原则是不同的。

res = client.lrange(key, start, end)

4. lpop / rpop 弹出左/右侧的数据

返回弹出的数据

res = client.lpop(key)
res = client.rpop(key)

集合数据操作

添加数据

1. sadd 添加若干成员

返回添加元素(不计忽略)数量,若元素已有则忽略

res = client.sadd(name, *values)

删除数据

1. spop 弹出一个成员

res = client.spop(key)

2. srem 删除若干成员

返回成功删除元素个数

res = client.srem(name, *values)

查询数据

1. scard 查询成员数量

res = client.scard(key)

2. smembers 查询所有成员

res = client.smembers(key)

3. srandmember 随机获取成员

num 确定返回成员数量,若是多个成员则返回列表

res = client.srandmember(key, num=None)

4. sismember 判断成员是否存在

res = client.sismember(name, value)

有序集合数据操作

添加数据

1. zadd 添加/设置成员及分值

返回成功添加的成员数量,mapping 是成员和分值组成的字典。

res = client.zadd(name, mapping)

删除数据

1. zrem 删除若干成员

返回删除的个数

res = client.zrem(name, *values)

修改数据

4. zincrby 修改某个成员分数

成员存在则修改分数,不存在则添加该成员且分数从0起进行修改。返回修改后的分数

res = client.zincrby(name, value, amount=1)

查询数据

1. zcard 返回基数

res = client.zcard(key)

2. zcount 返回分值范围内的成员个数

区间左右闭合

res = client.zcount(key, min, max)

3. zscore 查询某个成员的分数

res = client.zscore(key, member)

4. zrank / zrevrank 返回按增序/降序排列某个成员的排名

res = client.zrank(name, value)
res = client.zrevrank(name, value)

5. zrange 返回排序范围内的成员和分数

res = client.zrange(name, start, end, desc=False, withscores=False, score_cast_func=float)

  • name : 键名 key
  • start : 查询起始排名
  • end : 查询结束排名
  • desc : 排名顺序,默认升序
  • withscores : 是否返回成员分数
  • score_cast_func : 对分数进行数据转换的函数
  • res : 返回值,列表型,如果需要返回成员分数则是元组列表型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值