跟我一起从零开始学python(五)数据库编程:Redis数据库

前言

回顾之前讲了python语法编程 ,必修入门基础和网络编程,多线程/多进程/协程等方面的内容,今天到了数据库编程篇,前面MySQL已经讲完了前面没看的也不用往前翻,系列文已经整理好了:

1.跟我一起从零开始学python(一)编程语法必修
2.跟我一起从零开始学python(二)网络编程
3.跟我一起从零开始学python(三)多线程/多进程/协程
4.跟我一起从零开始学python(四)数据库编程:MySQL篇

本篇讲:python数据库编程:Redis数据库

本系列文根据以下学习路线展开讲述,由于内容较多,:

从零开始学python到高级进阶路线图

一丶服务端和客户端基本操作命令

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 是有序集合的名称,startend 分别表示要获取的元素的起始位置和结束位置(从 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 是有序集合的名称,minmax 分别表示要获取的分数范围的最小值和最大值,startnum 分别表示要获取的元素的起始位置和数量(从 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-pyredishiredis等。其中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类型基本的操作,我们还可以使用其他方法,根据具体应用需求进行选择和使用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容