sql
白小白的小白
你知道的越多,你不知道的越多!
展开
-
pgsql关于序列以及连接数的常见命令
pgsql 序列 主键原创 2022-10-25 11:44:33 · 1066 阅读 · 0 评论 -
为什么一般一个表数据不能超过2000万
为什么一般一个单表数量不超过2000万原创 2022-09-29 11:24:04 · 483 阅读 · 0 评论 -
redis的一些知识点
redis原创 2022-09-28 10:56:53 · 506 阅读 · 0 评论 -
pgsql的一些操作
将varchar变为整数类型:alter table 表名 alter column 字段名 type int USING 字段名::int;创建序列(从1开始自增)CREATE SEQUENCE 序列名 START 1;原创 2022-05-09 14:33:27 · 201 阅读 · 0 评论 -
Redisson分布式锁实现原理
Redisson这个框架对Redis分布式锁的实现原理图如下:加锁机制:一个客户端A要加锁,它首先会根据hash节点选择一台机器,这里注意,仅仅只是选择一台机器。紧接着就会发送一段lua脚本到redis上,比如加锁的那个锁key就是"mylock",并且设置的时间是30秒,30秒后,mylock锁就会被释放锁互斥机制:如果这个时候客户端B来加锁,它也会会根据hash节点选择一台机器,然后执行了同样的一段lua脚本。它首先回来判断"exists mylock"这个锁存在吗?如果存在,则B会获得一个原创 2021-09-03 15:47:32 · 2078 阅读 · 0 评论 -
Sharding-JDBC执行原理
Sharding-JDBC的执行步骤1. sql解析2. sql路由(标准路由:根据分片算法+分片键=分片策略来找到对应的库。 迪卡尔路由:垂直分表和水平分片混合到一起查询, 全库路由:根据广播的方式来查询所有表)3. sql改写4. 结果归并(流式归并:分而治之,每个sql先排序,然后再比较。 内存归并:将所有结果集都放到内存中,再经过统一的分组 排序等操作返回。 装饰者归并:在对所有的结果归并后再执行,如sum集合,先用流式归并后再执行sum)...原创 2021-08-30 09:37:04 · 206 阅读 · 0 评论 -
mysql一些常见知识点
mysql常见知识点原创 2021-08-28 16:20:58 · 260 阅读 · 0 评论 -
记一次djnago orm框架中的数据优化
1 only和defer优化有一个表为:然后我在djnago中使用orm框架中查询,sql语句为:obj = AppOauthInfoLog.objects.all().first()print(obj.id)print(obj.app_id)执行的sql结果为:根据图片可以看出来,这条sql把表中的所有字段都给查询了出来,这样明显浪费i/o,如果我们使用only来优化那:obj = AppOauthInfoLog.objects.only("id", "app_id").first(原创 2021-07-03 11:28:30 · 172 阅读 · 0 评论 -
mysql给用户分配权限
地址原创 2021-07-02 17:37:24 · 1652 阅读 · 0 评论 -
mysql buffer pool 讲解
转载地址:地址转载 2021-06-24 11:33:01 · 127 阅读 · 0 评论 -
redis充当缓存如何保证缓存数据不是脏数据
一般在电商项目中,有一些热点数据,用户频繁的访问,导致并发量较高,那么我们就需要使用redis来将这些热点数据给保存起来,利用redis的高速率来应对当请求热点数据时 1.1 查询redis缓存,如果存在,直接返回数据 1.2 如果缓存中数据不存在,那么查询mysql,然后将结果存入缓存并返回结果当热点数据发生更新等操作时 2.1 查询缓存,如果存在,那么直接更新缓存 2.2 更新mysql,操作结束 2.3 分析,如果执行了2.1,执行到2.2时,服务挂掉了或者写库的线程宕机了,或者其原创 2021-06-08 18:10:12 · 843 阅读 · 0 评论 -
记一次sql调优
数据库中有一张表read_user_collection_record1. 我为其建立的索引为:2. 我执行的sql为:SELECT count(*) from read_user_collection_record where app_id=28 and state=1;3. 执行的结果为:4. 我执行explain的结果是:5. 结果:根据索引的最左侧搜索,以及key和extra来观察,确实走了索引将sql变为:SELECT count(*) from read_user_col原创 2021-06-03 18:07:53 · 102 阅读 · 0 评论 -
python中redis incr的使用
在一些项目中,有时候需要记录一些数字,比如需要知道每天微信推送了多少条模板消息或者其他的一些需求,或者一个功能:用户扫码当天达到20次即不再让用户扫码,或者秒杀活动中,这件商品只规定卖200件,如果我们使用数据库来作为查询,那么并发量特别大,db就会抗不住,我们就需要用中间件来削峰,并且配合redis, 当然,我们的电商项目肯定没有那么大,并发量也不会那么大,为了避免超卖,我们使用mysql中的乐观锁也可以,但是为了更快,我们就可以使用redis中的incr来提高效率为什么可以使用redis中的incr.原创 2021-05-31 16:04:41 · 2817 阅读 · 0 评论 -
mysql索引回表
回表定义:先索引扫描,再通过ID去取索引中未能提供的数据,即为回表。假如有个表T, 里面三个字段:id k name, 其中对k建立了索引如果语句是 select * from T where id=500,即主键查询方式(聚集索引),则只需要搜索 ID 这棵 B+ 树,查询一表即可如果语句是 select id, k from T where k=5,即普通索引查询方式,则只要搜索 k 索引树,这样的话查询一表即可。如果语句是 select id, k , name from T原创 2021-05-10 12:08:51 · 2917 阅读 · 0 评论 -
数据库设计的三大范式
什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系.所以建立科学的,规范的的数据库是需要满足一些.范式的规范说法:第一范式 – 每表中的字段不可再分割第二范式 – 要有主键,并且其他字段依赖于主键(方便唯一确定数据行,并定位其他字段)第三范式 – 在二范式的基础上,消除传递依赖,各种信息只在一个地方存储,不出现在多张表中。比如学生信息表的学号为主键,此时要查看他所在的系信息,那么不能直接将系信息存储在学生信息表中,因为系信息已经在系别管理表中,此时只能在学生原创 2021-05-10 11:42:57 · 207 阅读 · 0 评论 -
MySQL 和 Redis缓存数据不一致解决方案
转载自:地址转载 2021-05-10 10:51:48 · 258 阅读 · 0 评论 -
redis aof操作时造成堵塞
解决办法:文章1 文章2转载 2021-05-10 10:06:44 · 297 阅读 · 0 评论 -
msyql导出表的一些操作
导出指定表的数据mysqldump -t database -u username -ppassword --tables table_name1 table_name2 table_name3 >D:\db_script.sql导出指定表的结构mysqldump -d database -u username -ppassword --tables table_name1 table_name2 table_name3>home/db_script.sql导出表的数据及结.原创 2021-04-13 16:19:16 · 115 阅读 · 0 评论 -
python ip与int相互转换
在项目中,我们经常会保存用户的ip,做一些判断,但是由于sql效率的原因,存整形比较好,所以,我们要把ip转化为int,如何转化那?def int_ip(num): s = [] for i in range(4): s.append(str(num %256)) num //= 256 return '.'.join(s[::-1])def ip_int(ip): res = 0 for j, i in enumerate(i.原创 2021-03-17 10:49:09 · 786 阅读 · 0 评论 -
python红包转账高并发处理
最近项目中有一个功能,就是转账红包(即时提现到支付宝,秒到账),每天限制用户提现一次,刚开始,每天和支付宝对账的时候都能对上,但是后来随着用户的增多,每天几万人提现,并发量上来了,发现有时候账单对不上,后来发现死锁了,然后使用事务并优化代码,这个问题解决了,随着时间的推移,突然发现有些用户提现了一次,支付宝给他连续转账了好几次,有的甚至几十次,然后看代码逻辑,怎么都没有发现问题,后来给支付宝提工单,支付宝那边回复是我这边连续调了转账接口好多次,然后就在思考这是为什么?由于每个用户每天只能提现一次,所以请原创 2021-03-16 10:40:42 · 279 阅读 · 0 评论 -
django中批量修改数据
在django 3.1版本中,出现了model的一个方法,就是批量修改数据库的数据,那么具体如何使用那优点:快速,方便,性能更好缺点:不能更新模型的主键,每个模型的 save() 方法没有被调用,而且 pre_save 和 post_save 信号没有被发送,更新定义在多表继承祖先上的字段将给每个祖先带来额外的查询(也就是如果更新外键的话还是不要使用)使用方法(更新type和sum_fans 字段):from users.models import Userquerys = User.obj.原创 2021-03-10 15:26:03 · 4299 阅读 · 0 评论 -
django中model中的外键删除
on_delete = models.CASCADE删除关联数据的时候,与之的关联也删除on_delete = models.DO_NOTHING删除关联数据的时候,什么操作也不做on_delete = models.PROTRCT删除关联数据的时候,引发报错on_delete = models.SET_NULL删除关联数据的时候,与之关联的只设置为空on_delete = models.SET_DEFAULT删除关联数据的时候,与之关联的只设置为默认值on_delete = models.SET原创 2021-03-04 17:07:42 · 554 阅读 · 1 评论 -
redis设置外网连接
首先要看看自己服务器有没有开防火墙,如果没有开启则不用操作第一步,如果开启,则需要把redis的接口允许访问systemctl status firewalld dead状态,即防火墙未开启systemctl start firewalld.service 开启防火墙systemctl stop firewalld.service 关闭防火墙firewall-cmd --query-port=6379/tcp 查询6379端口是否允许访问firewall-cmd --list-po.原创 2021-02-05 10:11:02 · 2105 阅读 · 0 评论 -
mysql远程连接
使用命令 mysql -uroot -p你的密碼 鏈接數據庫GRANT ALL PRIVILEGES ON . TO root@"%" IDENTIFIED BY “你的密碼”;flush privileges;原创 2021-01-29 22:54:38 · 82 阅读 · 0 评论 -
设置mysql的最大并发数
在我们调优的过程中,有一个环节就是对数据库的最大并发数来进行调优,设置一个服务器能承受的并发数,就能最大的进行优化查看数据库的配置文件的位置,先使用命令一,如果什么都没有出现,则默认使用了默认位置,此时执行命令二, 执行命令二后,会出现地址命令1:ps aux|grep mysql|grep 'my.cnf'命令2:mysql --help|grep 'my.cnf'使用vim 逐一打开,查看数据库的配置到底在那个路径下,然后看到如图,修改成合适的连接数:然后重启mysql :ser原创 2021-01-23 13:00:13 · 2251 阅读 · 0 评论 -
测试接口工具
在我们写接口的时候,经常会使用postman来请求接口,来验证我们的接口返回的数据是否符合我们的预期以及响应的时间快慢,有时候我们不想安装postman,我们可以在浏览器中使用一个插件,我们需要下载下来,然后在浏览器的扩展程序中安装一下就可以了插件地址,选择本地安装就自动下载了:地址...原创 2021-01-20 09:31:26 · 118 阅读 · 0 评论 -
mysql中的原生sql
更改数据update 表名 set is_delete = 1 where u_id= '';添加表字段ALTER TABLE 表名 ADD 添加的字段名称 VARCHAR(30) DEFAULT '0'原创 2021-01-18 11:42:22 · 338 阅读 · 0 评论 -
django中怎么使用mysql数据库的事务
在进行后端业务开始操作修改数据库时,可能会涉及到多张表的数据修改,对这些数据的修改应该是一个整体事务,即要么一起成功,要么一起失败,Django中对于数据库的事务,默认每执行一句数据库操作,便会自动提交。我们需要在保存数据库操作中自己控制数据库事务的执行流程在Django中可以通过django.db.transaction模块提供的atomic来定义一个事务,atomic提供两种用法:装饰器的用法(在这个函数下如果报错,那么这个函数中所有sql语句都会撤销):from django.db impo原创 2020-12-25 10:39:16 · 400 阅读 · 0 评论 -
django框架使用elasticsearch实现全文检索
首先你的服务器上要安装有docker,具体如何安装,我的另一篇博客有安装elasticsearch环境(docker安装)拉取镜像docker image pull delron/elasticsearch-ik:2.4.6-1.0运行容器docker run -d -p 9200:9200 -p 9300:9300 --name search delron/elasticsearch-ik:2.4.6-1.0首先安装相关的依赖包pip3 install drf-haystack .原创 2020-12-23 17:24:19 · 316 阅读 · 0 评论 -
django中使用redis来实现签到和uv数据统计
在我们的实际开发中,有时候会用到一些功能,比如签到和一些数据统计,那么这些功能,我们不可能去建立一些表去专业为签到和数据统计去服务,因为签到和数据统计这些都会导致这个表的数据越来越多,导致服务器整体性能下降,那么我们就可以用redis的一些功能来处理:签到功能:我们签到可以使用redis中的位图bitmap功能来实现,具体的bitmap功能介绍可以看这里:bitmap功能介绍数据统计:如果我们有一个功能是统计每天这个功能模块有多少用户访问,我们就可以使用HyperLogLog来统计:H原创 2020-12-21 15:49:27 · 360 阅读 · 3 评论 -
drf框架之session的存放地址
如果我们使用drf框架状态保持使用的是session的话,而不是jwt,那么我们的后台肯定要保存数据,用于对比验证,这样保存到那里就成了问题,保存到mysql中,这是框架默认的存储地址,在setting中可以不用设置,但是这种当用户少的时候是没问题的,但是用户量很大的时候,服务器开销就会很大,影响性能保存到缓存中redis中,这样的话查询速度就会很快,但是我们都知道redis数据一旦存储满的话,就会实行删除策略,这样会丢失一部分数据,导致用户状态无法保持,所以最好的办法就是 数据库-缓存 并用,两者.原创 2020-12-21 11:36:41 · 444 阅读 · 0 评论 -
python中布隆过滤器的使用
文章地址:转载地址转载 2020-11-18 11:20:58 · 349 阅读 · 0 评论 -
linux安装redis
wget https://download.redis.io/releases/redis-6.0.9.tar.gz(可以选择版本)tar xzvf redis-6.0.9.tar.gz(解压)安装:cd redis-6.0.9makecd srcmake install PREFIX=/usr/local/redis移动配置文件到安装目录下:cd …/mkdir /usr/local/redis/etcmv redis.conf /usr/local/redis/etc配置redi.原创 2020-11-11 14:35:44 · 102 阅读 · 0 评论 -
mysql清空表,从1开始自增
清空表并让其主键从1开始自增:TRUNCATE TABLE 加上表名解除外键链接:SET FOREIGN_KEY_CHECKS=0;恢复外键链接:SET FOREIGN_KEY_CHECKS=1;原创 2020-08-15 10:44:18 · 1712 阅读 · 0 评论 -
redis基本常识
redis基本常识:大神的博客redis内存淘汰机制:Redis 的过期策略主要有两种思路:1. 定期删除:在redis中默认是每隔100ms 就随机抽取一些设置了过期时间的key,检查其是否过期,若过期就删除,假设有100W的key,并且都设置了过期时间,如果全量检查的话,将会耗费大量的cpu时间,因此使用随机抽取。可能带来的问题是,已经过期的key还滞留在内存中,占用大量的宝贵内存空间2. 惰性删除:当key过期后,不做删除动作,等到下次使用的时候,发现key过期,这时不在返回这个key转载 2020-07-27 16:04:49 · 153 阅读 · 1 评论 -
redis实现订单支付(延时队列)
在电商网站中,我们经常会遇到订单支付,退货时间问题,那么怎么去处理那?设置定时任务,使用liunx中的at定时就可以轻松搞定,这里不在过多的研究使用redis延时队列:redis有一个数据类型,Sset叫做可以排序的集合(有序集合),为什么会是有序的那,是因为它与set相比有个属性叫score,sset就是这个属性(字段)来排序的,那如何实现延时队列那?实现方法:利用zset保存队列信息,score按照时间戳存放,再启动一个任务(线程),一直扫这个zset,判断当前时间和队列中的时间大小信息,如原创 2020-07-21 16:16:20 · 1869 阅读 · 0 评论 -
django中使用redis做缓存中间件
由于电商后台的首页,客户要求的数据特别多,都是从各个表中查出来的,我大致算了一下,大概要查30多个表,我想这不行啊,于是决定使用使用redis作为缓存使用客户要求的首页展示数据,这只是一小小部分我决定写一个脚本,每天晚上凌晨时查询db,放入redis,# -*- coding: utf-8 -*-#!/usr/bin/python3import osimport sysimport datetimeBASE_DIR = os.path.dirname(os.path.dirn原创 2020-07-21 11:47:08 · 378 阅读 · 1 评论 -
redis解决资源竞争
什么是资源竞争:资源竞争就是比如有两个线程A和B,两个线程都对一个变量a进行加1,每个线程都要执行100次,此时a为0,理论上结束之后a为200,但是应为资源竞争的存在,a可能会小于200, 因为cpu在处理两个线程的时候, 是采用雨露均沾的方式, 可能在线程A刚刚将a值+1还没来得及将新值赋给a时, 就开始处理线程B了, 因此当线程B执行完全部的a+=1的操作后, 可能又会开始对线程A的未完成的操作, 而此时的操作停留在了完成运算未赋值的那一步, 因此在完成对a的赋值后, 就会覆盖掉之前线程A对a的+.原创 2020-07-14 17:07:27 · 444 阅读 · 0 评论 -
redis分布式锁
redis分布式锁要解决的问题:为了保证一个方法或属性在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用并发处理相关的功能进行互斥控制。但是,随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的应用并不能提供分布式锁的能力。为了解决这个问题就需要一种跨机器的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题!(可以保证在分布式部署的应用集群中,同一个方.原创 2020-07-14 16:29:25 · 140 阅读 · 0 评论 -
redis操作命令
redis原生操作命令(官网):redis原生操作命令(官网)redis原生操作命令(转载):redis原生操作命令(转载)redis python操作命令(转载):redis python操作命令(转载)转载 2020-07-13 13:27:44 · 128 阅读 · 0 评论