Ciallo~(∠・ω・ )⌒☆第二十五篇 Redis

news2025/2/26 1:36:14

Redis 是一个高性能的键值存储数据库,它能够在内存中快速读写数据,并且支持持久化到磁盘。它被广泛应用于缓存、队列、实时分析等场景。

一、启动redis服务器

要打开redis服务器,需要在终端中输入redis-server命令。确保已经安装了redis,并且路径已经正确配置。打开终端,输入redis-server命令并按下回车键,即可启动redis服务器。

 在控制台输入:

redis-cli

来连接redis服务器:

二、redis 数据类型对应的操作

主要使用python来实现redis的相关操作

(一)、使用pip命令安装redis-py库:

pip install redis

安装完成后,可以在Python代码中导入redis库:

import redis

(二)、接下来,连接到Redis服务器:

# 创建Redis连接
client = redis.Redis(host='localhost', port=6379, db=0)

这里的host是Redis服务器的主机名,port是Redis服务器的端口号(默认为6379),db是使用的数据库编号(默认为0)。

(三)、键的操作

# 获取键的类型
print(client.type("key_string"))
# 设置有效期
client.set("key_string", 101)
client.expire("key_string", 100)
# 剩余时间
print(client.ttl("key_string"))
# 移除有效期
client.persist("key_string")
# 删除键
client.delete("key_string")
# 打印键
print(client.keys())

(四)、字符串的操作

# 添加字符串
client.set("id", 101)
# 获取字符串
print(client.get("id").decode())
# 连续添加字符串
client.mset({"name": "kurumi", "address": "youkohama"})
# 连续获取字符串
print(client.mget(["name", "address", "id"]))
# 获取字符串长度
print(client.strlen("name"))
# 设置字符串寿命
client.set("id", 101, ex=100)
# 获取字符串寿命
print(client.ttl("id"))

 (五)、列表的操作

# 从列表左边删除
value = client.lpop("key_list")
print(value)
# 从列表右边删除
value = client.rpop("key_list")
print(value)

# 返回索引对应的元素
print(client.lindex("key_list", 1))
# 返回索引范围内的元素
print(client.lrange("key_list", 0, 3))
# 对原始数据使用索引切割
print(client.ltrim("key_list", 2, 3))

  (六)、哈希的操作

client.hset("key_hash", "key1", "value1")
print(client.hget("key_hash", "key1"))
# 键值对的个数
print(client.hlen("key_hash"))
# 删除指定的键
client.hdel("key_hash", "key1")
# 返回所有键
print(client.hkeys("key_hash"))
# 返回所有值
print(client.hvals("key_hash"))
# 返回所有键值对
print(client.hgetall("key_hash"))

   (七)、集合的操作

# 添加
client.sadd("key_set", 1, 2, 3, 2, 1)
# 删除指定值,没有不管
client.srem("key_set", 1, 2, 5, 7)
# 是否是成员
print(client.sismember("key_set", "3"))
# 所有成员
print(client.smembers("key_set"))
# 个数
print(client.scard("key_set"))
# 交集
print(client.sinter(["key_set", "key_set2"]))
# 并集
print(client.sunion(["key_set", "key_set2"]))
# 差集
print(client.sdiff(["key_set", "key_set2"]))

    (八)、有序集合的操作

# 添加
client.zadd("key_zset", {"aaa": 15, "bbb": 20, "ccc": 30})
# 删除
client.zrem("key_zset", "aaa", "ccc")
# 个数
print(client.zcard("key_zest"))
# 根据值取权重
print(client.zscore("key_zset", "bbb"))
# 根据获取权重范围内个数
print(client.zcount("key_zset", 20, 25))
# 根据权重排序索引返回值
print(client.zrange("key_set", 0, 1))

三、 mysql与redis结合使用

MySQL和Redis是两种功能各异的数据库系统,通常可以结合使用来发挥各自的优势。以下是它们如何结合使用的方法:

import pymysql
import redis


class MySqlHelper:
    def __init__(self):
       self.con = None
       self.cur = None
       try:
          self.con = pymysql.connect(user="root", password="123456", database="python2407")
       except Exception as e:
          print(f"连接出异常")
       else:
          self.cur = self.con.cursor()

    def query_one(self, sql, args=None):
       try:
          self.cur.execute(sql, args)
          return self.cur.fetchone()
       except Exception as e:
          print(f"查询出异常")

    def update(self, sql, args=None):
       try:
          row = self.cur.execute(sql, args)
          self.con.commit()
          return row
       except Exception as e:
          print(f"修改出异常")

    def __del__(self):
       if self.cur:
          self.cur.close()
       if self.con:
          self.con.close()


class RedisHelper:
    def __init__(self):
       self.client = None
       try:
          self.client = redis.Redis(host="192.168.13.32", password="123456")
       except Exception as e:
          print(f"连接redis失败")


    def query_one(self, key):
       try:
          return self.client.hgetall(key)
       except Exception as e:
          print(f"执行查询失败")

    def update(self, key, value):
       try:
          self.client.hset(key, mapping=value)
       except Exception as e:
          print(f"执行修改失败", e)

    def __del__(self):
       if self.client:
          self.client.close()


class DataHelper:
    def __init__(self):
       self.sql = MySqlHelper()
       self.redis = RedisHelper()

    def regist_user(self, username, password):
       row = self.sql.update("insert into user (username, password) values (%s, %s)", (username, password))
       if row > 0:
          user = self.sql.query_one("select * from user where username = %s and password = %s", (username, password))
          self.redis.update(f"{user[0]}", {"id": user[0], "username": user[1], "password": user[2]})
          print(f"注册成功")

    def query_user(self, u_id):
       value = self.redis.query_one(u_id)
       if value:
          print(f"redis中直接找到")
          return value
       else:
          user = self.sql.query_one("select * from user where id = %s", u_id)
          if user:
             print(f"redis中没有找到, 从mysql中找到放入redis")
             self.redis.update(f"{u_id}", {"id": user[0], "username": user[1], "password": user[2]})
             return user


def main():
    dh = DataHelper()
    r = dh.query_user("3031")
    print(r)



if __name__ == '__main__':
    main()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064430.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】/* 链式队列 和 循环队列 - 底层实现 */

一、链式队列 1. 使用双向链表实现队列,可以采用尾入,头出 也可以采用 头入、尾出 (LinkedList采用尾入、头出) 2. 下面代码实现的是尾入、头出: package bageight;/*** Created with IntelliJ IDEA.* Description:* User: tangyuxiu* Date: …

mOTA v2.0

mOTA v2.0 一、简介 本开源工程是一款专为 32 位 MCU 开发的 OTA 组件,组件包含了 bootloader 、固件打包器 (Firmware_Packager) 、固件发送器 三部分,并提供了基于多款 MCU (STM32F1 / STM32F407 / STM32F411 / STM32L4) 和 YModem-1K 协议的案例。基…

【文献及模型、制图分享】2000—2020年中国青饲料播种面积及供需驱动因素的时空格局

文献介绍 高产、优质的青饲料对于国家畜牧业发展和食物供给至关重要。然而,当前对于青饲料播种面积时空变化格局及其阶段性特征、区域差异以及影响因素等尚未清楚。 本文基于省级面板数据分析了2000—2020年青饲料种植的时空格局变化,结合MODIS-NPP产品…

Nginx 405 not allowed

问题原因:nginx不允许静态文件被post请求 解决:添加error_page 405 200 $request_uri;

白酒与家庭:团圆时刻的需备佳品

在中国传统文化中,家庭是社会的基石,是每个人心灵的港湾。而团圆,则是家庭生活中较美好的时刻。在这样一个特殊的日子里,白酒,尤其是豪迈白酒(HOMANLISM),成为了团圆时刻的需备佳品。…

了解JS数组元素及属性

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、定义数组并输出2、查询数组的长度3、访问数组的第一个元素4、访问数组中第一个元素的xxx属性5、从数组元素中提取ID并存储到搜索参数对象 提示:以下是…

C++设计模式1:单例模式(懒汉模式和饿汉模式,以及多线程问题处理)

饿汉单例模式 程序还没有主动获取实例对象&#xff0c;该对象就产生了&#xff0c;也就是程序刚开始运行&#xff0c;这个对象就已经初始化了。 class Singleton { public:~Singleton(){std::cout << "~Singleton()" << std::endl;}static Singleton* …

KUKA KR C2 中文操作指南 详情见目录

KUKA KR C2 中文操作指南 详情见目录

Selenium + Python 自动化测试22(PO+数据驱动)

我们的目标是&#xff1a;按照这一套资料学习下来&#xff0c;大家可以独立完成自动化测试的任务。 上一篇我们讨论了PO模式和unittest框架结合起来使用。 本篇文章我们综合一下之前学习的内容&#xff0c;如先将PO模式、数据驱动思想和我们生成HTML报告融合起来&#xff0c;综…

​2024年AI新蓝海:三门生意如何借AI之力,开启变现新篇章

【导语】在这个日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;已不再是遥不可及的未来科技&#xff0c;而是正逐步渗透到我们生活的方方面面&#xff0c;成为推动产业升级的重要力量。你是否还在为传统行业的未来而忧虑&#xff1f;别担心&#xff0c;AI正以其…

Pandas DataFrame 数据转换处理和多条件查询

工作中需要处理一个比较大的数据&#xff0c;且当中需要分析的日期类型字段为字符串型&#xff0c;需要进行转换&#xff0c;获得一个新的字段用于时间统计。我们应用 datetime.datetime.strptime 函数进行转换。 数据读取与时间列补充代码如下&#xff1a; import pandas as…

原来ChatGPT是这么评价《黑神话:悟空》的啊?

《黑神话&#xff1a;悟空》一经上线便迅速吸引了全球的目光&#xff0c;成为了今日微博热搜榜上的焦点话题。作为中国首款现象级的中国3A大作&#xff0c;它的发布无疑引发了广泛的关注与讨论。 《黑神话&#xff1a;悟空》&#xff0c;这款3A国产游戏大作&#xff0c;由国内游…

根据状态的不同,显示不同的背景颜色

文章目录 前言HTML模板部分JavaScript部分注意&#xff1a;主要差异影响如何处理示例 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 实现效果&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 根据给定的状态…

文件操作2(函数的专栏)

1、文件的打开和关闭 1.1文件指针 在缓冲文件系统中&#xff0c;关键的概念是“文件类型指针”&#xff0c;简称“文件指针”取名为FILE。 例如&#xff0c; VS2013编译环境提供的 stdio. h头文件中有以下的文件类型申明&#xff1a; struct _ iobuf { char *_ ptr; int _…

【YOLO5 项目实战】(6)YOLO5+StrongSORT 目标追踪

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【YOLO5 项目实战】&#xff08;1&#xff09;YOLO5 环境配置与检测 【YOLO5 项目实战】&#xff08;2&#xff09;使用自己的数据集训练目标检测模型 【YOLO5 项目实战】&#xff08;6&#xff09;Y…

数据库机器上停service360safe

发现有个数据库的负载较高&#xff0c;发现有360safe&#xff0c;就准备停了该服务再观察 [rootdb1 ~]# ps -ef |grep 360 root 970 1 0 15:12 ? 00:00:10 /opt/360safe/360entclient root 976 970 5 15:12 ? 00:18:42 /opt/360…

Linux之RabbitMQ集群部署

RabbitMQ 消息中间件 1、消息中间件 消息(message)&#xff1a; 指在服务之间传送的数据。可以是简单的文本消息&#xff0c;也可以是包含复杂的嵌入对象的消息 消息队列(message queue): 指用来存放消息的队列&#xff0c;一般采用先进先出的队列方式&#xff0c;即最先进入的…

关于springboot的异常处理以及源码分析(一)

一、什么是异常处理 1、文档定义 首先我们先来看springboot官方对于异常处理的定义。springboot异常处理 在文档的描述中&#xff0c;我们首先可以看到的一个介绍如下&#xff1a; By default, Spring Boot provides an /error mapping that handles all errors in a sensib…

优思学院|如何在30分钟内评审一家供应商?SQE必需知道的11点

在供应商评审中&#xff0c;特别是时间有限的情况下&#xff0c;SQE&#xff08;供应商质量工程师&#xff09;需要通过高效的观察和分析来快速评估供应商的能力。在《哈佛商业评论》中&#xff0c;R. Eugene Goodson 的一篇“Read a Plant—Fast”文章正好提供了一个极为实用的…

python实现指数平滑法进行时间序列预测

python实现指数平滑法进行时间序列预测 一、指数平滑法定义 1、指数平滑法是一种常用的时间序列预测算法,有一次、二次和三次平滑,通过加权系数来调整历史数据权重; 2、主要思想是:预测值是以前观测值的加权和,且对不同的数据给予不同的权数,新数据给予较大的权数,旧数…