跟我一起从零开始学python(五)数据库编程:Redis数据库
前言
回顾之前讲了python语法编程 ,必修入门基础和网络编程,多线程/多进程/协程等方面的内容,今天到了数据库编程篇,前面MySQL已经讲完了前面没看的也不用往前翻,系列文已经整理好了:
1.跟我一起从零开始学python(一)编程语法必修
2.跟我一起从零开始学python(二)网络编程
3.跟我一起从零开始学python(三)多线程/多进程/协程
4.跟我一起从零开始学python(四)数据库编程:MySQL篇
本篇讲:python数据库编程:Redis数据库
本系列文根据以下学习路线展开讲述,由于内容较多,:
一丶服务端和客户端基本操作命令
Redis是一种基于内存的数据结构存储系统,常用于缓存、消息队列、排行榜等场景。下面介绍一些Redis服务端和客户端的基本操作命令。
1.服务端命令
启动Redis服务
redis-server
关闭Redis服务
redis-cli shutdown
查看Redis服务状态
redis-cli ping
查看Redis服务版本
redis-cli info server
查看Redis服务配置
redis-cli config get *
修改Redis服务配置
redis-cli config set <parameter> <value>
2.客户端命令
连接Redis服务
redis-cli -h <host> -p <port> -a <password>
设置键值对
redis-cli set <key> <value>
获取键值对
redis-cli get <key>
删除键值对
redis-cli del <key>
判断键是否存在
redis-cli exists <key>
设置键的过期时间
redis-cli expire <key> <seconds>
查看键的过期时间
redis-cli ttl <key>
查看所有键
redis-cli keys *
查看键的类型
redis-cli type <key>
列表操作
redis-cli lpush <key> <value> # 从左侧插入元素
redis-cli rpush <key> <value> # 从右侧插入元素
redis-cli lrange <key> <start> <stop> # 获取列表元素
redis-cli lpop <key> # 从左侧弹出元素
redis-cli rpop <key> # 从右侧弹出元素
集合操作
redis-cli sadd <key> <value> # 添加元素
redis-cli smembers <key> # 获取所有元素
redis-cli sismember <key> <value> # 判断元素是否存在
redis-cli srem <key> <value> # 删除元素
哈希表操作
redis-cli hset <key> <field> <value> # 设置字段值
redis-cli hget <key> <field> # 获取字段值
redis-cli hgetall <key> # 获取所有字段和值
redis-cli hdel <key> <field> # 删除字段
有序集合操作
redis-cli zadd <key> <score> <value> # 添加元素
redis-cli zrange <key> <start> <stop> # 获取元素
redis-cli zrem <key> <value> # 删除元素
以上是Redis服务端和客户端的基本操作命令,更多命令可以参考Redis官方文档。
二丶数据操作
1.string
Redis是一种基于内存的数据存储系统,支持多种数据结构,其中之一就是string。在Python中,我们可以使用redis-py库来操作Redis数据库中的string数据类型。
以下是一些常用的Redis string操作命令:
①.set(key, value):设置key对应的value值
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('name', 'Tom')
②.get(key):获取key对应的value值
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
name = r.get('name')
print(name)
③.mset(mapping):批量设置多个key-value对
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.mset({'name': 'Tom', 'age': 18})
④.mget(keys):批量获取多个key对应的value值
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
values = r.mget(['name', 'age'])
print(values)
⑤.incr(key, amount=1):将key对应的value值增加amount
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('count', 1)
r.incr('count')
⑥.decr(key, amount=1):将key对应的value值减少amount
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('count', 10)
r.decr('count', 5)
⑦.append(key, value):将value追加到key对应的value值的末尾
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('name', 'Tom')
r.append('name', ' Smith')
⑧.strlen(key):获取key对应的value值的长度
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
name_len = r.strlen('name')
print(name_len)
以上是Redis string数据类型的一些基本操作命令,可以根据实际需求进行使用。
2.键命令
Redis中的键命令用于管理和操作键值对。以下是一些常用的键命令:
- SET key value:设置键值对,如果键已经存在,则覆盖原有的值。
- GET key:获取键对应的值。
- DEL key:删除指定的键值对。
- EXISTS key:检查指定的键是否存在。
- KEYS pattern:查找所有符合给定模式的键。
- TTL key:获取键的过期时间,单位为秒。
- EXPIRE key seconds:设置键的过期时间,单位为秒。
- PERSIST key:移除键的过期时间,使其永久有效。
- TYPE key:获取键对应的值的数据类型。
这些命令可以通过Python Redis模块中的对应方法来调用,例如:
import redis
# 连接Redis数据库
r = redis.Redis(host='localhost', port=6379, db=0)
# 设置键值对
r.set('name', 'Alice')
# 获取键对应的值
name = r.get('name')
print(name)
# 删除指定的键值对
r.delete('name')
# 检查指定的键是否存在
exists = r.exists('name')
print(exists)
# 查找所有符合给定模式的键
keys = r.keys('*')
print(keys)
# 获取键的过期时间
ttl = r.ttl('name')
print(ttl)
# 设置键的过期时间
r.expire('name', 60)
# 移除键的过期时间
r.persist('name')
# 获取键对应的值的数据类型
type = r.type('name')
print(type)
3.hash
在 Redis 中,Hash 是一个键值对集合,其中键和值都是字符串类型。Hash 可以用于存储对象,例如用户信息、商品信息等。
以下是 Python Redis 操作 Hash 的一些常用命令:
①.HSET(key, field, value):设置 Hash 中指定字段的值
redis_conn.hset('user:1', 'name', 'Alice')
②.HGET(key, field):获取 Hash 中指定字段的值
redis_conn.hget('user:1', 'name')
③.HMSET(key, mapping):设置 Hash 中多个字段的值
redis_conn.hmset('user:1', {'age': 20, 'gender': 'female'})
④.HMGET(key, fields):获取 Hash 中多个字段的值
redis_conn.hmget('user:1', 'name', 'age', 'gender')
⑤.HGETALL(key):获取 Hash 中所有字段和值
redis_conn.hgetall('user:1')
⑥.HDEL(key, field):删除 Hash 中指定字段
redis_conn.hdel('user:1', 'gender')
⑦.HEXISTS(key, field):判断 Hash 中是否存在指定字段
redis_conn.hexists('user:1', 'gender')
⑧.HKEYS(key):获取 Hash 中所有字段
redis_conn.hkeys('user:1')
⑨.HVALS(key):获取 Hash 中所有值
redis_conn.hvals('user:1')
⑩.HLEN(key):获取 Hash 中字段的数量
redis_conn.hlen('user:1')
以上是 Python Redis 操作 Hash 的一些常用命令,可以根据实际需求选择使用。
4.list
Redis中的List是一个双向链表,支持在头部和尾部进行插入和删除操作。List中的每个元素都是一个字符串。
Python中可以使用redis-py库来操作Redis数据库中的List数据类型。
首先需要导入redis库:
import redis
连接Redis数据库:
r = redis.Redis(host='localhost', port=6379, db=0)
List操作
①. 插入元素
在List的头部插入一个或多个元素:
r.lpush('list_key', 'value1', 'value2', 'value3')
在List的尾部插入一个或多个元素:
r.rpush('list_key', 'value4', 'value5', 'value6')
在指定元素前或后插入一个元素:
r.linsert('list_key', 'BEFORE', 'value2', 'new_value')
r.linsert('list_key', 'AFTER', 'value2', 'new_value')
②. 获取元素
获取List中指定范围内的元素:
r.lrange('list_key', 0, -1) # 获取所有元素
r.lrange('list_key', 0, 2) # 获取前三个元素
r.lrange('list_key', -3, -1) # 获取后三个元素
获取List中指定索引的元素:
r.lindex('list_key', 0) # 获取第一个元素
r.lindex('list_key', -1) # 获取最后一个元素
③. 删除元素
从List的头部删除一个元素:
r.lpop('list_key')
从List的尾部删除一个元素:
r.rpop('list_key')
删除List中指定的元素:
r.lrem('list_key', 0, 'value2') # 删除所有值为value2的元素
r.lrem('list_key', 1, 'value2') # 删除第一个值为value2的元素
r.lrem('list_key', -1, 'value2') # 删除最后一个值为value2的元素
④. 其他操作
获取List的长度:
r.llen('list_key')
将List中的最后一个元素移动到另一个List的头部:
r.rpoplpush('list_key', 'new_list_key')
阻塞式地从一个List的尾部弹出一个元素,并将其插入到另一个List的头部:
r.brpoplpush('list_key', 'new_list_key', timeout=0)
以上就是Python中操作Redis数据库中List数据类型的常用方法。
5.set
Redis中的Set是一个无序的集合,它的作用和List类似,都是用来存储多个字符串元素的集合。但是Set不同于List的是,Set中不允许出现重复的元素,而且Set中的元素是无序的。
Python中操作Redis的Set可以使用redis模块中的set方法。下面是一些常用的Set操作:
①.添加元素
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 添加单个元素
r.sadd('set_key', 'value1')
# 添加多个元素
r.sadd('set_key', 'value2', 'value3', 'value4')
②.获取元素
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 获取所有元素
members = r.smembers('set_key')
print(members)
# 判断元素是否存在
is_member = r.sismember('set_key', 'value1')
print(is_member)
③.删除元素
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 删除单个元素
r.srem('set_key', 'value1')
# 删除多个元素
r.srem('set_key', 'value2', 'value3', 'value4')
# 删除集合
r.delete('set_key')
④.集合运算
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 求交集
r.sadd('set_key1', 'value1', 'value2', 'value3')
r.sadd('set_key2', 'value2', 'value3', 'value4')
intersection = r.sinter('set_key1', 'set_key2')
print(intersection)
# 求并集
union = r.sunion('set_key1', 'set_key2')
print(union)
# 求差集
difference = r.sdiff('set_key1', 'set_key2')
print(difference)
6.zset
在 Redis 中,ZSET(有序集合)是一种特殊的数据结构,它是一个键值对集合,其中每个元素都关联着一个浮点数分数。这个分数被用来按照从最小值到最大值的顺序排序元素。ZSET 的成员是唯一的,但分数(score)却可以重复。
Python Redis 操作有序集合的方法:
①.添加元素
使用 zadd
命令向有序集合中添加元素,语法如下:
zadd(name, mapping)
其中,name
是有序集合的名称,mapping
是一个字典,表示要添加的元素和它们的分数。例如:
redis.zadd('myzset', {'one': 1, 'two': 2, 'three': 3})
②.获取元素
使用 zrange
命令获取有序集合中指定范围内的元素,语法如下:
zrange(name, start, end, withscores=False)
其中,name
是有序集合的名称,start
和 end
分别表示要获取的元素的起始位置和结束位置(从 0 开始计数),withscores
表示是否同时返回元素的分数。例如:
redis.zrange('myzset', 0, -1, withscores=True)
③.获取元素数量
使用 zcard
命令获取有序集合中元素的数量,语法如下:
zcard(name)
其中,name
是有序集合的名称。例如:
redis.zcard('myzset')
④.获取元素排名
使用 zrank
命令获取有序集合中指定元素的排名,语法如下:
zrank(name, value)
其中,name
是有序集合的名称,value
是要获取排名的元素。例如:
redis.zrank('myzset', 'two')
⑤.获取元素分数
使用 zscore
命令获取有序集合中指定元素的分数,语法如下:
zscore(name, value)
其中,name
是有序集合的名称,value
是要获取分数的元素。例如:
redis.zscore('myzset', 'two')
⑥.删除元素
使用 zrem
命令从有序集合中删除指定的元素,语法如下:
zrem(name, values)
其中,name
是有序集合的名称,values
是要删除的元素。例如:
redis.zrem('myzset', 'two')
⑦.获取指定分数范围内的元素
使用 zrangebyscore
命令获取有序集合中指定分数范围内的元素,语法如下:
zrangebyscore(name, min, max, start=None, num=None, withscores=False, score_cast_func=float)
其中,name
是有序集合的名称,min
和 max
分别表示要获取的分数范围的最小值和最大值,start
和 num
分别表示要获取的元素的起始位置和数量(从 0 开始计数),withscores
表示是否同时返回元素的分数,score_cast_func
表示分数的类型转换函数。例如:
redis.zrangebyscore('myzset', 1, 2, withscores=True)
三丶python操作Redis
1.Redis库
Redis是一个开源的内存数据结构存储系统,它支持多种数据结构,包括字符串、哈希、列表、集合和有序集合等。Redis的特点是速度快、可靠性高、支持丰富的数据结构和操作,因此被广泛应用于缓存、消息队列、计数器、排行榜等场景。
Python是一种高级编程语言,它具有简单易学、代码简洁、可读性强等特点,因此被广泛应用于Web开发、数据分析、人工智能等领域。Python提供了多种Redis客户端库,可以方便地操作Redis数据库。
Python操作Redis需要先安装Redis客户端库,常用的有redis-py
、redis
、hiredis
等。其中redis-py
是Redis官方推荐的Python客户端库,支持Python 2和Python 3,提供了丰富的API,使用方便。
安装redis-py库可以使用pip命令:
pip install redis
安装完成后,就可以在Python中使用redis-py
库操作Redis数据库了。下面是一个简单的示例:
import redis
# 连接Redis数据库
r = redis.Redis(host='localhost', port=6379, db=0)
# 设置键值对
r.set('name', 'Tom')
# 获取键值对
name = r.get('name')
print(name)
在上面的示例中,首先使用redis.Redis()
方法连接Redis数据库,然后使用r.set()
方法设置键值对,使用r.get()
方法获取键值对。其中,host
参数指定Redis
服务器的IP
地址,port
参数指定Redis
服务器的端口号,db
参数指定Redis
数据库的编号。如果没有指定db
参数,则默认使用编号为0的数据库。
除了set()
和get()
方法,redis-py
库还提供了多种操作Redis数据库的方法,包括incr()
、decr()
、hset()
、hget()
、lpush()
、rpush()
、lrange()
、sadd()
、smembers()
、zadd()
、zrange()
等
连接Redis数据库:
import redis
# 连接Redis数据库
r = redis.Redis(host='localhost', port=6379, db=0)
设置键值对:
# 设置键值对
r.set('name', 'Tom')
获取键值对:
# 获取键值对
name = r.get('name')
print(name)
删除键值对:
# 删除键值对
r.delete('name')
设置过期时间:
# 设置过期时间
r.setex('name', 10, 'Tom') # 10秒后过期
判断键是否存在:
# 判断键是否存在
if r.exists('name'):
print('name exists')
else:
print('name does not exist')
自增自减:
# 自增
r.incr('count')
# 自减
r.decr('count')
以上是Redis库的基本操作
2.python-redis对string类型的操作
Redis是一种内存键值对存储数据库,支持不同类别的数据类型,其中之一是string类型。字符串类型是Redis中最基本的数据类型。下面是一些操作Redis中String类型的基本操作:
①.设置String
我们可以使用set()
方法设置String。如果键不存在,则创建一个新键并存储字符串值。如果键已经存在则覆盖该键的旧值。例如:
import redis
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('key', 'value')
这将在Redis中创建一个名为“key”的键,并将其值设置为“value”。
②.获取String
我们可以使用get()方法来获取String的值。例如:
value = r.get('key')
这将返回名为“key”的键的当前值。
③.删除String
我们可以使用delete()
方法来删除String。例如:
r.delete('key')
这将删除名为“key”的键。
④.操作String
Redis还提供了许多其他操作String的方法,例如:
-
append(key, value)
:将value附加到key的末尾。 -
incr(key[, amount])
:递增名为“key”的键的值,可加+1或加自定义数值amount。 -
decr(key[, amount])
:递减名为“key”的键的值,可减-1或减自定义数值amount。 -
setnx(key, value)
:仅在键“key”不存在时设置键的值为“value”。 -
getset(key, value)
:将键“key”的值设置为“value”,并返回键“key”之前的值。
例如,增加"in_stock"键的值2:
r.set("in_stock",10)
r.incr("in_stock",2)
print(r.get("in_stock"))
这将返回12,因为"in_stock"
键的值从10增加了2。
这是Redis中一些对String类型基本的操作,我们还可以使用其他方法,根据具体应用需求进行选择和使用。