百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Python操作Redis入门指引(python中redis的用法)

mhr18 2024-11-08 12:11 26 浏览 0 评论

Redis介绍

Redis是一个开源(BSD许可),内存存储的数据结构服务器,是一个高性能的键值对数据库。Redis以其内存中数据存储、低延迟和原子操作而闻名,可用作数据库、高速缓存和消息队列。它支持字符串、哈希表、列表、集合、有序集合等数据类型。Redis 的作者antirez开发 Redis 的动机主要是为了解决他在使用现有数据库解决方案时需要频繁操作磁盘IO导致性能存在瓶颈的问题,如今Redis已经成为主流,它几乎出现在所有的web服务中。

Redis支持的数据类型

由于Redis作者antirez系统编程的背景,antirez更喜欢从列表、散列和集合等数据结构的角度来思考问题,因此redis支持的数据类型都是较低级别的数据结构,这反而为数据库领域带来了新的想法,它支持的基本数据结构类型有:

  • 字符串String
  • 哈希表Hash
  • 列表List
  • 集合Set
  • 有序集合Sorted Set

Redis命令

快速上手Redis的办法就是实际去使用它,可以参考我在在Ubuntu24.04 LTS系统上如何安装redis一文中的方法搭建Redis环境,再安装一个Redis客户端(如Another Redis Desktop Manager)连接Redis进行练习,远程连接redis一般需要配置host、port、password。

连接成功后可以进入命令行模式熟悉redis操作,接下来就以redis常用的几种数据类型为例来熟悉基本的命令

字符串类型

# 创建key为string_key, value为hello redis的字符串类型
set string_key "hello redis"

# 查询key为string_key的字符串的值,结果为hello redis
get string_key
客户端工具也提供了GUI的设置和查看方法,非常的方便

哈希表类型

# 创建key为hask_key, value为哈希表{a: 1, b: 2}的hash数据对象
hmset hash_key a 1 b 2

# 查询key为hash_key, hash表对象a、b的值,结果为1、2
hmget hash_key a b

列表类型

# 创建key为list_key的列表类型数据,并向value添加字符a
lpush list_key a
# 继续向list_key添加字符b,这时list_key对应的值为列表[a, b]
lpush list_key b

# 从list_key对应的列表中弹出一个值,列表为后进先出队列,因此先弹出b
lpop list_key
# 继续弹出一个值,此时弹出a
lpop list_key
# 如果继续弹出的话,因为列表已经为空返回null
lpop list_key

集合类型
集合和列表很相似,不同之处在一集合不会出现重复项

# 连续向set_key添加a、b、a三个字符,最终得到的value为集合{a, b},字符a被覆盖
sadd set_key a
sadd set_key b
sadd set_key a

# 同样地使用spop命令逐个弹出集合中的值,也是后进先出,弹出的顺序为b、a、null
spop set_key

有序集合类型
有序集合和集合类型,不同之处在于集合的每一个元素会分配一个double类型的分数,并按照这个分数进行排序

# 连续向key为sorted_key的有序集合中添加元素{a: 3}、{b: 2}、{c: 1}三个指定了分数的元素
# 从下图展示的结果可以看出集合按照score进行了降序排列
zadd sorted_key 3 a
zadd sorted_key 2 b
zadd sorted_key 1 c

# zpopmin命令从有序集合中弹出元素,从score最小的开始,可以指定弹出的元素数量,下面的命令弹出c 1
zpopmin sorted_key 1
# zpopmax命令从有序集合中弹出元素,从score最大的开始,可以指定弹出的元素数量,下面的命令弹出a 3
zpopmax sorted_key 1

从上面关于有序集合的特性不难发现它非常适合用来搭建一个优先级队列。

上面展示的Redis命令只是其中的很少的一部分,但是逐个实践之后相信一定会对redis的使用有了一定的基础,接下来可以通过查看命令行手册发掘更多有用的命令。

python操作Redis

Redis的命令一般只是学习和调试时才会使用,真正的应用都是使用编程语言对redis进行读写等操作,python redis模块为Redis的一个客户端库,它提供的方法几乎和Redis命令如出一辙,下面就以有序集合为例演示操作Redis的基本方法。
首先执行下面的命令安装redis模块

pip install redis

下面演示代码展示如何添加、查询、弹出、删除有序集合,其他数据类型只要参考redis命令就可以很容易知道该怎么写

# 导入redis模块
from redis import StrictRedis

REDIS_URL = "redis://:ABC1234@192.168.1.18:6379/0"

if __name__ == "__main__":
    # redis支持传入host、port、password以及指定redis_url两种方式建立redis连接
    # redis = StrictRedis(host='192.168.1.18', port=6379, db=0, password='ABC1234')
    redis = StrictRedis.from_url(REDIS_URL)
    # 添加有序集合,zadd刚好对应redis有序集合的添加命令
    redis.zadd('language', {'python': 0})
    redis.zadd('language', {'rust': 99})
    redis.zadd('language', {'ruby': 3})
    redis.zadd('language', {'c': 66})
    # 查询全部有序集合,从小到大排序
    data = redis.zrangebyscore('language', 0, 100)
    for i in data:
        print(i.decode('utf-8'))

    # 弹出有序集合,从最大的开始取,可以指定取出数量
    data = redis.zpopmax('language', 1)
    print(data)

    # 删除有序集合
    redis.delete('language')

    # 关闭redis连接
    redis.close()

运行输出结果:

python
ruby
c
rust
[(b'rust', 99.0)]

redis模块同样支持异步编程模式,使得redis可以在无阻塞模式下运行,下面给出异步模式示例代码,运行结果是一样的。

import asyncio

# 导入redis异步模块
from redis import asyncio as aioredis

REDIS_URL = "redis://:ABC1234@192.168.1.18:6379/0"

async def redis_demo_async():  
    # redis支持传入host、port、password以及指定redis_url两种方式建立redis连接
    # redis = StrictRedis(host='192.168.1.18', port=6379, db=0, password='ABC1234')
    redis = aioredis.from_url(REDIS_URL)
    # 添加有序集合
    await redis.zadd('language', {'python': 0})
    await redis.zadd('language', {'rust': 99})
    await redis.zadd('language', {'ruby': 3})
    await redis.zadd('language', {'c': 66})

    # 查询全部有序集合,从小到大排序
    data = await redis.zrangebyscore('language', 0, 100)
    for i in data:
        print(i.decode('utf-8'))

    # 弹出有序集合,从最大的开始取,可以指定取出数量
    data = await redis.zpopmax('language', 1)
    print(data)

    # 删除有序集合
    await redis.delete('language')

    await redis.aclose()

if __name__ == "__main__":
    asyncio.run(redis_demo_async())

相关推荐

redis 7.4.3更新!安全修复+性能优化全解析

一、Redis是什么?为什么选择它?Redis(RemoteDictionaryServer)是一款开源的高性能内存键值数据库,支持持久化、多数据结构(如字符串、哈希、列表等),广泛应用于缓存、消...

C# 读写Redis数据库的简单例子

CSRedis是一个基于C#的Redis客户端库,它提供了与Redis服务器进行交互的功能。它是一个轻量级、高性能的库,易于使用和集成到C#应用程序中。您可以使用NuGet包管理器或使用以下命令行命令...

十年之重修Redis原理

弱小和无知并不是生存的障碍,傲慢才是。--------面试者总结Redis可能都用过,但是从来没有理解过,就像一个熟悉的陌生人,本文主要讲述了Redis基本类型的使用、数据结构、持久化、单线程模型...

高频L2行情数据Redis存储架构设计(含C++实现代码)

一、Redis核心设计原则内存高效:优化数据结构,减少内存占用低延迟访问:单次操作≤0.1ms响应时间数据完整性:完整存储所有L2字段实时订阅:支持多客户端实时数据推送持久化策略:RDB+AOF保障数...

Magic-Boot开源引擎:零代码玩转企业级开发,效率暴涨!

一、项目介绍基于magic-api搭建的快速开发平台,前端采用Vue3+naive-ui最新版本搭建,依赖较少,运行速度快。对常用组件进行封装。利用Vue3的@vue/compiler-sfc单文...

项目不行简历拉胯?3招教你从面试陪跑逆袭大厂offer!

项目不行简历拉胯?3招教你从面试陪跑逆袭大厂offer!老铁们!是不是每次面试完都感觉自己像被大厂面试官婉拒的渣男?明明刷了三个月题库,背熟八股文,结果一被问项目就支支吾吾,简历写得像大学生课程设计?...

谷歌云平台:开发者部署超120个开源包

从国外相关报道了解,Google与Bitnami合作为Google云平台增加了一个新的功能,为了方便开发人员快捷部署程序,提供了120余款开源应用程序云平台的支持。这些应用程序其中包括了WordPre...

知名互联网公司和程序员都看好的数据库是什么?

2017年数据库领域的最大趋势是什么?什么是最热的数据处理技术?学什么数据库最有前途?程序员们普遍不喜欢的数据库是什么?本文都会一一揭秘。大数据时代,数据库的选择备受关注,此前本号就曾揭秘国内知名互联...

腾讯云发布云存储MongoDB服务

近日,著名安全专家兼Shodan搜索引擎的创建者JohnMatherly发现,目前至少有35000个受影响的MongoDB数据库暴露在互联网上,它们所包含的数据暴露在网络攻击风险之中。据估计,将近6...

已跪,Java全能笔记爆火,分布式/开源框架/微服务/性能调优全有

前言程序员,立之根本还是技术,一个程序员的好坏,虽然不能完全用技术强弱来判断,但是技术水平一定是基础,技术差的程序员只能CRUD,技术不深的程序员也成不了架构师。程序员对于技术的掌握,除了从了解-熟悉...

面试官:举个你解决冲突的例子?别怂!用这个套路……

面试官:举个你解决冲突的例子?别怂!用这个套路……最近收到粉丝私信,说被问到:团队技术方案有分歧怎么办?当场大脑宕机……兄弟!这不是送命题,是展示你情商+技术判断力的王炸题!今天教你们3招,用真实案例...

面试碰到MongoDB?莫慌,跟面试官这样吹MongoDB 复制集

推荐阅读:吊打MySQL:21性能优化实践+学习导图+55面试+笔记+20高频知识点阿里一线架构师分享的技术图谱,进阶加薪全靠它十面字节跳动,依旧空手而归,我该放弃吗?文末会分享一些MongoDB的学...

SpringBoot集成扩展-访问NoSQL数据库之Redis和MongoDB!

与关系型数据库一样,SpringBoot也提供了对NoSQL数据库的集成扩展,如对Redis和MongoDB等数据库的操作。通过默认配置即可使用RedisTemplate和MongoTemplate...

Java程序员找工作总卡项目关?

Java程序员找工作总卡项目关?3招教你用真实经历写出HR抢着要的简历!各位Java老哥,最近刷招聘软件是不是手都划酸了?简历投出去石沉大海,面试邀请却总在飞别人的简历?上周有个兄弟,13年经验投了5...

Java多租户SaaS系统实现方案

嗯,用户问的是Java通过租户id实现的SaaS方案。首先,我需要理解用户的需求。SaaS,也就是软件即服务,通常是指多租户的架构,每个租户的数据需要隔离。用户可能想知道如何在Java中利用租户ID来...

取消回复欢迎 发表评论: