Python Redis极速入门教程:10分钟内掌握使用技巧
文章目录
一、Redis 简介
Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis 使用 C 语言编写,支持多种类型的数据结构,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等,同时还支持范围查询、位图(Bitmaps)、HyperLogLog 和地理空间(geospatial)索引半径查询等功能。
二、Redis 特性
三、Redis 使用场景
四、Redis 客户端与常用命令
Redis 提供了命令行客户端 redis-cli,用于与 Redis 服务进行交互。以下是一些常用的 Redis 命令:
五、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. 数据操作
字符串操作
设置键值对 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']
哈希操作
存储哈希值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', ...}
列表操作
添加元素
r.lpush('mylist', 'value1') # 在列表左侧添加
r.rpush('mylist', 'value2') # 在列表右侧添加
获取列表元素lrang(mylist, 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']
移除元素
# 移除并获取列表的第一个元素
print(r.lpop('mylist')) # 输出: b'0'
# 移除并获取列表的最后一个元素
print(r.rpop('mylist')) # 输出: b'c'
列表长度llen(mylist)
print(r.llen('mylist')) # 输出列表的长度
集合操作
添加元素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。
七、Redis 集群与分布式
Redis 提供了集群和分布式功能,可以通过哨兵和 Cluster 实现高可用性和数据分片。
作者:Mr.小码