码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 自学Python第二十三天- redis 库


    自学Python第二十三天- redis 库

    • redis 的安装和引用
    • 连接到数据库
      • 直接连接到数据库
      • 使用连接池
    • 数据库操作
    • 关于数据操作
    • 通用数据操作
      • 删除操作
      • 修改操作
      • 查询操作
      • 其他操作
    • 字符串数据操作
      • 添加数据
        • 1. set 添加(设置)单个键值对
        • 2. mset 添加(设置)多个键值对
      • 修改数据
        • 1. setrange 根据索引修改值
        • 2. incr / decr 值自增/自减
        • 3. incrbyfloat 值自增浮点数
        • 4. append 字符串追加
      • 查询数据
        • 1. get 获取单个键的值
        • 2. mget 获取多个键的值
        • 3. getset 设置新值并返回旧值
        • 4. getrange 根据索引获取键的部分值
        • 5. strlen 获取值的长度
    • 哈希表数据操作
      • 添加数据
        • 1. hset 添加/设置一个哈希表中的键值对
        • 2. hmset 添加/设置多个哈希表中的键值对
      • 删除数据
        • 1. hdel 删除哈希表中的键值对
      • 修改数据
        • 1. hincrby 自增哈希表中 key 对应的值(必须整数数值)
        • 2. hincrbyfloat hincrby 的小数版
      • 查询数据
        • 1. hget 获取一个哈希表中的键的数据
        • 2. hmget 获取多个哈希表中的键的数据
        • 3. hgetall 获取哈希表中所有的键值对
        • 4. hlen 获取哈希表的长度(键值对数量)
        • 5. hkeys 获取哈希表中所有的键
        • 6. hvals 获取哈希表中所有键的值
        • 7. hexists 检查哈希表中是否存在某个键
    • 列表数据操作
      • 添加数据
        • 1. lpush / rpush 从左/右测添加元素
        • 2. lpushx / rpushx 从左/右侧添加元素都已存在的列表
        • 3. linsert 在给定值前/后插入数据
      • 删除数据
        • 1. lren 删除列表中N个相同的值
        • 2. ltrim 删除索引范围外的所有值
      • 修改数据
        • 1. lset 根据索引修改值
      • 查询数据
        • 1. llen 查询列表长度
        • 2. lindex 根据索引获取数据
        • 3. lrange 根据索引区间获取数据
        • 4. lpop / rpop 弹出左/右侧的数据
    • 集合数据操作
      • 添加数据
        • 1. sadd 添加若干成员
      • 删除数据
        • 1. spop 弹出一个成员
        • 2. srem 删除若干成员
      • 查询数据
        • 1. scard 查询成员数量
        • 2. smembers 查询所有成员
        • 3. srandmember 随机获取成员
        • 4. sismember 判断成员是否存在
    • 有序集合数据操作
      • 添加数据
        • 1. zadd 添加/设置成员及分值
      • 删除数据
        • 1. zrem 删除若干成员
      • 修改数据
        • 4. zincrby 修改某个成员分数
      • 查询数据
        • 1. zcard 返回基数
        • 2. zcount 返回分值范围内的成员个数
        • 3. zscore 查询某个成员的分数
        • 4. zrank / zrevrank 返回按增序/降序排列某个成员的排名
        • 5. zrange 返回排序范围内的成员和分数

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

    redis 的安装和引用

    安装 redis

    pip install redis
    
    • 1

    引用 redis

    import redis
    
    • 1

    连接到数据库

    直接连接到数据库

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

    使用连接池

    使用连接池管理 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)
    
    • 1
    • 2
    • 3
    • 4

    数据库操作

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

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

    关于数据操作

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

    通用数据操作

    删除操作

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

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

    修改操作

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

    res = client.rename(key, newkey)
    
    • 1

    查询操作

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

    res = client.exists(key)
    
    • 1

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

    res = client.randomkey()
    
    • 1

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

    res = client.type(key)
    
    • 1

    其他操作

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

    res = client.move(key, db)
    
    • 1

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

    res = client.expire(key, seconds)
    
    • 1

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

    res = client.ttl(key)
    
    • 1

    字符串数据操作

    添加数据

    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
    • 2
    • 3
    • 4
    • 5

    修改数据

    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 : 返回值,列表型,如果需要返回成员分数则是元组列表型。
  • 相关阅读:
    Vue模板语法
    ps找不到msvcp140.dll怎么办?亲测5个有效的修复方法分享
    SpringBoot统一功能处理
    HTML <map> 标签的使用
    C#实现根据字体名称获取字体文件名
    2.5计划任务远程管理
    FAT32文件系统---第4章 分区挂载
    基于JAVA基于MVC框架的在线书店设计计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    如何改进企业旧式工时管理系统?
    Python实现“黑猫投诉平台,舆论监控系统”
  • 原文地址:https://blog.csdn.net/runsong911/article/details/126308065
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号