golang上下文context的使用

作用

通过使用Context,可以做到统一的、全链路的流程控制和数据传递。

常用的方法

golang
ctx=context.WithValue(ctx,"my_key","my_value") // 设置一个值 ctx,cancel:=context.WithCancel(context.Background()) //设置一个取消信号 ctx,cancel:=context.WithTimeout(context.Background(),1*time.Second) // 设置一个超时取消信号 cancel()

日常中可能存在文件中包含空行的问题,针对该类问题,可以通过grep或者sed等命令进行整理

  • 通过grep进行处理
grep -v '^$' 原始文件 > 结果文件

redis 常用的数据结构以及使用场景

  • string
  • hash
  • list
  • set
  • zset
    • 底层结构为跳表

Redis 快主要有五个原因:

  • 基于内存操作,没有磁盘随机 IO。
  • 单线程处理命令(网络模型可多线程,但命令执行单线程),避免线程切换和锁竞争。
  • 高效的数据结构(SDS、HashTable、SkipList、QuickList 等)。
  • IO 多路复用(epoll/kqueue)提高网络处理能力。
  • C 语言实现,运行时开销小。

Redis 为什么采用单线程?

Redis 不是整个程序只有一个线程,而是“核心命令执行”主要是单线程

也就是说,客户端发来的 GET、SET、HGET、ZADD 等命令,在 Redis 主线程中按顺序执行。

为什么单线程还快

因为 Redis 的主要操作都在内存中完成,不需要频繁磁盘 IO

单线程的好处

  • 没有锁竞争
    • 多线程操作同一份数据,需要加锁;Redis 单线程执行命令,不需要为数据结构加锁。
  • 没有线程切换成本
    • 多线程频繁切换会有上下文切换开销,Redis 避免了这部分成本。
  • 命令执行很快
    • 大多数 Redis 命令复杂度很低,比如 GET、SET 通常是 O(1)。
  • 使用 IO 多路复用
    • Redis 通过 epoll/kqueue 同时处理大量连接,不是一个连接一个线程

请求流程

text
多个客户端连接 ↓ IO 多路复用监听事件 ↓ Redis 主线程读取请求 ↓ 单线程执行命令 ↓ 返回结果
import os import pandas as pd files = os.listdir( '文件目录路径') # 使用glob匹配所有csv文件 csv_files = [f for f in files if f.endswith('.csv')] for file in csv_files: tmp = "文件目录路径" + file df = pd.read_csv(tmp, sep='\t')
2024-06-120

docker的基础学习

简单介绍

docker是一种虚拟化技术,虚拟化技术主要分以下三种

  1. 硬件虚拟化,底层的技术实现
  2. 软件虚拟化,比如常见的虚拟机
  3. 容器虚拟化

本地传输文件到服务器

  1. 首先在服务器开启端口监听
  2. 本地执行上传文件命令
nc -l 监听端口 > example.txt # 服务端 nc 服务器ip 服务器监听端口 < 本地文件地址 # 本地
js
with dbpool.connection() as conn: with conn.cursor(pymysql.cursors.DictCursor) as cursor: sql = "select guid,raw_req from tp_data_storage where req_id=%s and tid=%s" data = (req_id, tid) # 手动拼接SQL - 这只适用于简单的情况,不建议在实际项目中这样做,因为有SQL注入的风险 # 对于复杂情况,请使用参数化查询,或者数据库驱动提供的安全方法 query = cursor.mogrify(sql, data) print(query) cursor.execute(sql, data) result = cursor.fetchone()
2024-06-070

相关信息

常见的http状态码

  • 100 服务器已经拿到请求,客户端应继续请求
    • 101 协议切换 web-socket一开始发起建立请求时,如果服务端支持,会返回101
  • 200 请求成功
  • 300 重定向
    • 301 永久重定向
    • 302 临时重定向
  • 400 客户端错误
    • 401 未识别到用户,需要用户提供账号密码或者token
    • 403 识别到用户 ,但用户存在权限问题
    • 400 请求参数有问题,服务端无法识别
    • 404 找不到请求的资源(可能是url填写错误、 或者网关转发错误、 后端定义错误路径)
    • 405 请求的方法被禁止
  • 500 服务端错误
    • 500 服务错误导致的终止
    • 502 网关收到了服务端的无效响应
    • 503 服务器维护中或者被请求过多
    • 504 网关超时时间内,未接收到服务端的响应