Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis 使用 C 语言编写,支持多种类型的数据结构,如字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等,同时还支持范围查询、位图(Bitmaps)、HyperLogLog 和地理空间(geospatial)索引半径查询等功能。
Redis 提供了命令行客户端 redis-cli,用于与 Redis 服务进行交互。以下是一些常用的 Redis 命令:
pip install 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 字符串形式存在,而不是字节类型。
r.set('mykey', 'myvalue')
value = r.get('mykey')
print(value) # 输出: myvalue
exists = r.exists('mykey')
print(exists) # 输出: True 或 False
deleted = r.delete('mykey')
print(deleted) # 输出: 1 表示删除成功
r.mset({'key1': 'value1', 'key2': 'value2'})
values = r.mget('key1', 'key2')
print(values) # 输出: ['value1', 'value2']
r.hset('myhash', 'field1', 'value1')
value = r.hget('myhash', 'field1')
print(value) # 输出: value1
# 假设 hmset 可用
r.hmset('myhash', {'field2': 'value2', 'field3': 'value3'})
values = r.hmget('myhash', 'field2', 'field3')
print(values) # 输出: [b'value2', b'value3'] (注意:这里可能需要 decode_responses=True)
all_fields_values = r.hgetall('myhash')
print(all_fields_values) # 输出类似: {'field1': 'value1', 'field2': 'value2', ...}
r.lpush('mylist', 'value1') # 在列表左侧添加
r.rpush('mylist', 'value2') # 在列表右侧添加
# 获取列表中的所有元素
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'
print(r.llen('mylist')) # 输出列表的长度
r.sadd('myset', 'element1')
r.sadd('myset', 'element2', 'element3') # 可以一次添加多个元素
elements = r.smembers('myset')
print(elements) # 输出集合中的所有元素,可能是一个无序的列表
length = r.scard('myset')
print(length) # 输出集合中的元素数量
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没有的元素
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'中的一个元素,并从集合中移除它
有序集合是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 支持两种持久化方式:RDB 和 AOF。
Redis 提供了集群和分布式功能,可以通过哨兵和 Cluster 实现高可用性和数据分片。