Python Redis极速入门教程:10分钟内掌握使用技巧

文章目录

  • 一、Redis 简介
  • 二、Redis 特性
  • 三、Redis 使用场景
  • 四、Redis 客户端与常用命令
  • 五、Redis在Python上的操作
  • 1. 安装 redis-py 库
  • 2. 连接Redis服务器
  • 3. 数据操作
  • 字符串操作
  • 设置键值对 set(key, string)
  • 获取字符串 get(key)
  • 检查键是否exists(key)
  • 删除键delete(key)
  • 批量设置键值对mset({key: value, key1: value1})
  • 哈希操作
  • 存储哈希值hset(keytable, key, value)
  • 获取哈希值hget(keytable, key)
  • 批量存储哈希值hget(keytable, key_dict)
  • 获取所有哈希值hgetall(keytable)
  • 列表操作
  • 添加元素
  • 获取列表元素lrang(mylist, start, end)
  • 移除元素
  • 列表长度llen(mylist)
  • 集合操作
  • 添加元素sadd(myset, value)
  • 获取集合中的元素smember(myset)
  • 集合的长度scart(myset)
  • 集合的差集sdiff(myset, myset1)
  • 集合的交集sinter(myset, myset1)
  • 从集合中移除元素
  • 集合的随机元素
  • 集合的弹出元素
  • 有序集合(Sorted Set)
  • 添加元素到有序集合
  • 获取有序集合中的元素
  • 获取有序集合的排名
  • 删除有序集合中的元素
  • 六、Redis 持久化与备份
  • 七、Redis 集群与分布式

  • 一、Redis 简介

    Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis 使用 C 语言编写,支持多种类型的数据结构,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等,同时还支持范围查询、位图(Bitmaps)、HyperLogLog 和地理空间(geospatial)索引半径查询等功能。

    二、Redis 特性

  • 速度快:Redis 的单节点读写速度非常快,读速度可以达到 11 万次/秒,写速度可以达到 8.1 万次/秒。
  • 数据存放内存:Redis 将所有数据存储在内存中,因此读写速度非常快。
  • 支持多种数据结构:Redis 支持多种类型的数据结构,满足不同的数据存储需求。
  • 持久化:Redis 支持数据的持久化,可以将内存中的数据异步保存到硬盘上,以防止数据丢失。
  • 高可用性:Redis 通过哨兵(Sentinel)和自动分区(Cluster)提供高可用性。
  • 三、Redis 使用场景

  • 缓存:Redis 最常见的使用场景是作为缓存系统,用于缓存热点数据,减少对数据库的访问压力。
  • 计数器:Redis 的自增自减操作非常适合实现计数器功能,如用户访问量统计、点赞数统计等。
  • 消息队列:Redis 可以实现简单的消息队列功能,用于生产者和消费者之间的消息传递。
  • 排行榜:Redis 的有序集合可以用于实现排行榜功能,如热门文章排行榜、游戏排行榜等。
  • 社交网络:Redis 可以用于存储社交网络中的用户关系、好友列表等信息。
  • 四、Redis 客户端与常用命令

    Redis 提供了命令行客户端 redis-cli,用于与 Redis 服务进行交互。以下是一些常用的 Redis 命令:

  • SET:添加或修改一个字符串类型的键值对。
  • GET:根据键名获取对应的值。
  • INCR:将一个整数值自增 1。
  • DECR:将一个整数值自减 1。
  • LPUSH:向列表的左边插入一个元素。
  • RPUSH:向列表的右边插入一个元素。
  • HSET:添加或修改一个哈希类型键的字段值。
  • HGET:根据键名和字段名获取哈希类型的值。
  • 五、Redis在Python上的操作

    1. 安装 redis-py 库

    pip install redis
    

    2. 连接Redis服务器

    使用 redis-py 库连接到 Redis 服务器。这可以通过创建 redis.Redis 或 redis.StrictRedis 的实例来完成。两者在大多数情况下可以互换使用。

    import redis  
      
    # 连接到本地 Redis 服务器  
    r = redis.Redis(host='localhost', port=6379, db=0, password='123456', decode_responses=True)  
      
    # 如果需要连接到远程 Redis 服务器或需要设置密码,可以修改 host, port, password 参数  
    # host ip地址 默认本地
    # port 端口号 默认6379
    # password 密码
    # db 数据库
    

    注意:decode_responses=True 参数用于确保从 Redis 获取的字符串数据以 Python 字符串形式存在,而不是字节类型。

    3. 数据操作

    字符串操作

  • key 代指键名
  • string 代指值(字符串类型)
  • 设置键值对 set(key, string)
    r.set('mykey', 'myvalue')
    
    获取字符串 get(key)
    value = r.get('mykey')  
    print(value)  # 输出: myvalue
    
    检查键是否exists(key)
    exists = r.exists('mykey')  
    print(exists)  # 输出: True 或 False
    
    删除键delete(key)
    deleted = r.delete('mykey')  
    print(deleted)  # 输出: 1 表示删除成功
    
    批量设置键值对mset({key: value, key1: value1})
    r.mset({'key1': 'value1', 'key2': 'value2'})  
    values = r.mget('key1', 'key2')  
    print(values)  # 输出: ['value1', 'value2']
    

    哈希操作

  • keytable 代指哈希表
  • key 字段
  • value 数据
  • 存储哈希值hset(keytable, key, value)
    r.hset('myhash', 'field1', 'value1')
    
    获取哈希值hget(keytable, key)
    value = r.hget('myhash', 'field1')  
    print(value)  # 输出: value1
    
    批量存储哈希值hget(keytable, key_dict)
    # 假设 hmset 可用  
    r.hmset('myhash', {'field2': 'value2', 'field3': 'value3'})  
    values = r.hmget('myhash', 'field2', 'field3')  
    print(values)  # 输出: [b'value2', b'value3'] (注意:这里可能需要 decode_responses=True)
    
    获取所有哈希值hgetall(keytable)
    all_fields_values = r.hgetall('myhash')  
    print(all_fields_values)  # 输出类似: {'field1': 'value1', 'field2': 'value2', ...}
    

    列表操作

  • mylist 代指列表名
  • value代指数据
  • 添加元素
  • lpush(mylist, value) 在列表左侧添加
  • rpush(mylist, value) 在列表右侧添加
  • r.lpush('mylist', 'value1')  # 在列表左侧添加  
    r.rpush('mylist', 'value2')  # 在列表右侧添加
    
    获取列表元素lrang(mylist, start, end)
  • start 索引开始位置
  • end 索引结束位置
  • # 获取列表中的所有元素  
    print(r.lrange('mylist', 0, -1))  # 输出: [b'0', b'a', b'b', b'c']  
      
    # 获取列表中的前两个元素  
    print(r.lrange('mylist', 0, 1))  # 输出: [b'0', b'a']
    
    移除元素
  • lpop:移除并获取列表的第一个元素
  • rpop:移除并获取列表的最后一个元素
  • # 移除并获取列表的第一个元素  
    print(r.lpop('mylist'))  # 输出: b'0'  
      
    # 移除并获取列表的最后一个元素  
    print(r.rpop('mylist'))  # 输出: b'c'
    
    列表长度llen(mylist)
    print(r.llen('mylist'))  # 输出列表的长度
    

    集合操作

  • myset 集合名
  • value 数据
  • 添加元素sadd(myset, value)
    r.sadd('myset', 'element1')  
    r.sadd('myset', 'element2', 'element3')  # 可以一次添加多个元素
    
    获取集合中的元素smember(myset)
    elements = r.smembers('myset')  
    print(elements)  # 输出集合中的所有元素,可能是一个无序的列表
    
    集合的长度scart(myset)
    length = r.scard('myset')  
    print(length)  # 输出集合中的元素数量
    
    集合的差集sdiff(myset, myset1)
    set1 = {'element1', 'element2', 'element3'}  
    r.sadd('set1', *set1)  # 假设set1已存在于Redis中  
    r.sadd('set2', 'element2', 'element4')  # 假设set2也已存在  
      
    diff = r.sdiff('set1', 'set2')  
    print(diff)  # 输出: {'element1', 'element3'},即set1有而set2没有的元素
    
    集合的交集sinter(myset, myset1)
    inter = r.sinter('set1', 'set2')  
    print(inter)  # 输出: {'element2'},即set1和set2共有的元素
    
    从集合中移除元素

    使用srem命令从集合中移除一个或多个元素。

    r.srem('myset', 'element1', 'element2')  
    # 现在'myset'中不再包含'element1'和'element2'
    
    集合的随机元素

    使用srandmember命令从集合中随机获取一个或多个元素。

    random_element = r.srandmember('myset')  
    print(random_element)  # 随机输出'myset'中的一个元素  
      
    # 获取多个随机元素  
    random_elements = r.srandmember('myset', 2)  # 获取两个随机元素  
    print(random_elements)
    
    集合的弹出元素

    使用spop命令从集合中随机移除一个元素并返回该元素。

    popped_element = r.spop('myset')  
    print(popped_element)  # 随机输出'myset'中的一个元素,并从集合中移除它
    

    有序集合(Sorted Set)

    有序集合是Redis中一种特殊的集合类型,它不仅包含元素,还为每个元素关联了一个浮点数分数(score),这使得元素可以按照分数进行排序。

    添加元素到有序集合

    使用zadd命令向有序集合中添加一个或多个元素及其分数。

    r.zadd('mysortedset', {'member1': 1, 'member2': 2})  
    # 或者对于单个元素  
    r.zadd('mysortedset', 1, 'member3')
    
    获取有序集合中的元素

    使用zrange(升序)或zrevrange(降序)命令获取有序集合中的元素及其分数。

    # 升序获取  
    ascending = r.zrange('mysortedset', 0, -1, withscores=True)  
    print(ascending)  # 输出类似: [('member1', 1.0), ('member2', 2.0), ('member3', 1.0)]  
      
    # 降序获取  
    descending = r.zrevrange('mysortedset', 0, -1, withscores=True)  
    print(descending)  # 输出可能反转的顺序
    
    获取有序集合的排名

    使用zrank(升序排名)或zrevrank(降序排名)命令获取元素的排名。

    rank = r.zrank('mysortedset', 'member1')  
    print(rank)  # 输出: 0,如果member1是分数最低的元素  
      
    revrank = r.zrevrank('mysortedset', 'member2')  
    print(revrank)  # 输出: 0,如果member2是分数最高的元素
    
    删除有序集合中的元素

    使用zrem命令从有序集合中移除一个或多个元素。

    r.zrem('mysortedset', 'member1', 'member3')
    

    六、Redis 持久化与备份

    Redis 支持两种持久化方式:RDB 和 AOF。

  • RDB:Redis 在指定的时间间隔内将内存中的数据集快照写入磁盘。
  • AOF:Redis 将所有对数据库进行写入的命令以追加的方式写入到文件中,当 Redis 重启时会重新执行文件中的命令来恢复数据。
  • 七、Redis 集群与分布式

    Redis 提供了集群和分布式功能,可以通过哨兵和 Cluster 实现高可用性和数据分片。

  • 哨兵(Sentinel):哨兵可以监控主节点和从节点的状态,当主节点出现故障时,哨兵会自动将从节点提升为主节点,实现故障转移。
  • Cluster:Cluster 可以将数据集自动分片到多个节点上,实现数据的分布式存储和负载均衡。
  • 作者:Mr.小码

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python Redis极速入门教程:10分钟内掌握使用技巧

    发表回复