自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 1.05-用户系统-ORM

MEDIA_URL和MEDIA_ROOT 需要手动绑定,在主路径注册。MEDIA_URL :什么样请求过来是加载上传文件请求。MEDIA_ROOT :上传存储路径。生成迁移文件,将内容迁移到数据库。函数返回定义类型就行。

2024-05-23 21:55:02 56

原创 1.04-RESTful设计风格

一般PUT全量更新,PATCH局部更新, 也不用这么细,都用PUT就行,并且Django对PATCH支持低,PUT支持更加全面。路径(名词)+请求方式(动词),大概就知道此api作用,降低沟通成本,提升开发效率。业界主流的api设计风格,统一风格,减少沟通成本,看api名称大概就理解意思。上一章节,test_cors 就是api部分,用于前后端通信。规则上PUT返回201,实际做法中可能成功都返回200。建议加api,表明是前后端通信接口。只是一个指导思想,不一定必须这样。可以自定义内部返回结构。

2024-04-27 14:03:29 124

原创 1.03-前后端分离-跨域-2

Content-Type不为对应3个条件之一。9:是否需要跨域的cookie,采用令牌,就不需要。8:希望ajax在代码层面能获取到的额外的响应头。7:预检请求多少秒不用再发 option 请求。测试环境配3,正式环境配4。预检请求中,接受的正式请求。

2024-04-25 22:23:04 196

原创 1.02-前后端分离-跨域-1

Access-Control-Max-Age 设置时间,这个时间段内,都不需要再次发送opyions请求。不包括 application/json, 所以json数据的不是简单请求。一个请求,发两次,增加了服务器负担。

2024-04-25 21:46:44 98

原创 项目实战-1.01-前后端分离介绍-1

4:因为搜索引擎公司,做网络爬虫时,爬取的只是前端js,无法通过ajax获取数据,一般爬取时,会标记这是爬取的请求,对应返回一些静态文字。7:动静分离:就近部署原则,湖南的请求,从湖南的服务器中获取静态资源。平时使用中不是网络优化了,时此部分优化了。浏览器给前端发请求获取页面,但是页面没有数据,ajax通信后端,后端返回json数据,js动态渲染。有些追求极致,通过二进制通信,json可视化程度高,中小企业应用度高。有大量render,就是前后端不分离。

2024-04-25 21:15:01 161

原创 3.06-哨兵

sentinel monitor监听项:tedu(主从组名称) 随便取值 + ip + 端口 + 个数(奇数个,涉及到投票)有时候一个哨兵发现对应redis挂了,可能不是真挂了,是网络问题。即使后续6379再次启起来,也是6381为主,6379为从。生成连接中,变量为列表,每一个哨兵为一个元组(ip,端口)默认情况下,redis哨兵自动启动的端口就是26379。只有等6379停掉后,6379才可能再次成为主。如果主从redis加哨兵配置,主从密码必须一致。如果切换新的主,密码不一样。

2024-04-21 00:15:21 89

原创 3.05-主从复制

用nginx做负载均衡,提高了接用户请求这层的高可用,不可能一个Django挂了,直接就不能用了。6379挂了以后,6300,6301要和6379断开,把6301变成6300的从。启动从服务后,连接master服务,完成数据同步。理论上,redis部署在不同机器上。Django跟新的master连接。三种搭建方案,推荐第三种配置方案。

2024-04-19 23:29:49 105 1

原创 3.0.4-数据持久化-AOF

只做缓存,AOF与RDB区别不大,也允许丢失部分数据,如果全部丢失,全部都请求mysql,可能mysql会瘫痪。开了AOF,重启redis,默认走AOF的数据恢复。来一个命令写一个(到缓冲区),只是写道磁盘会有时间。cpu多少核,可以开多少个redis。everysec 性价比最高。AOF文件通常比RDB文件大。与RDB共用存储路径。

2024-04-19 21:52:33 152

原创 3.03-数据持久化-RDB

可能两次持久化中间服务器挂了,所以时间越小,完整度越高,但是进程执行会更加频繁。一般情况下用 BGSAVE,因为内存数据量大的时候,阻塞耗不起。两种持久化方案都不完美,如果要想完美,与磁盘交互频率就得加大。正常启动redis,会加载rdb文件,把数据加载到内存里。redis在数据存储,内存交互方面保持单进程,单线程。服务器断电,kill -9 ,无法自动触发。通常在辅助类操作时,可能用到多进程。全量持久化,所以新文件会代替旧文件。正常停止redis命令,自动触发。全量持久化,相当于快照。

2024-04-18 00:12:10 148 1

原创 3.02-事务-2

降低了客户端与服务端通信次数,效仿redis对命令的存储,客户端先将命令存储,最后打包一堆命令一起发到redis。乐观锁,上锁后,其他人可以修改,如果其他人没有修改,则事务成功,如果其他人修改,则事务不成功。执行pipe.execute(),才会把命令一起打包给redis。只有watch命令,立马发送到redis!mysql一般为悲观锁,一旦锁住,其他人就无法修改。是否开启事务: transaction=true。redis存储不耗时,主要是网络上无效的耗时。非事务测试: 流水线 VS 无流水线。

2024-04-17 22:23:16 156 1

原创 3.01-事务-1

多个Django连接一个redis时,A和B同时发送几个命令,redis的事务能保证先执行A的几个命令,再执行B的几个命令,不会导致命令顺序的混乱。开启事务后,命令全部发给redis,redis会给此次客户端一个存储空间,按顺序存储这些命令,先不执行,直到EXEC指令再执行。mysql的回滚是执行了命令又撤回,redis的DISCARD是清空命令,实际一个命令也没有执行。redis不是纯磁盘存储,持久性也有取舍,保证大部分数据不丢失,允许小部分数据丢失。会有中间状态,不保证原子性,一致性也无法完美达到。

2024-04-16 22:42:30 274

原创 8.06-项目部署-nginx-2

nginx可以让自己充当路由,如果不注释掉try_files,会从最上面路径去找,找不到就会报404。一旦用uWSGI启动Django后(生产环境),Django就不会管静态文件。让nginx去管静态文件,nginx用c语言写,加载静态文件快。注释掉try_files,就不会有nginx的404。admin的静态文件就是Django的内建静态文件。只要有静态文件添加,就需要做导入操作。nginx中需配置静态文件路径。日志配置:访问日志,错误日志。静态文件缓存处理,协商缓存?

2024-04-15 23:04:39 125 1

原创 8.05-项目部署-nginx-1

nginx也认识uwsgi协议(二进制协议),与HTTP超文本协议对比传输体更紧凑,解析效率高,传输效率相对更高,从nginx到uWSGI一般用uwsgi。启动时,先写入uwsgi.pid,然后再启动,第二次会启动失败,但是uwsgi.pid中进程ID会改变,所以会导致停止时失败。uwsgi不具有转发功能,不能转发给其他机器,只能转发给自己的Django,所以要用到nginx。修改后,默认走uwsgi协议,uWSGI接收uwsgi协议。安装完毕后会自动启动,并把80端口拿走,从浏览器可以访问。

2024-04-15 21:53:18 104 2

原创 8.04-项目部署-uwsgi

Django核心代码没有任何网络IO(epoll等),不认识HTTP, runserver是一个简单HTTP服务,有网络IO代码,能读懂HTTP请求响应,测试环境是runserver和浏览器之间进行tcp连接,请求量大,容易挂掉。daemonize:只要配置了,说明是后台启动,输出写入对应日志中。生产环境用uWSGI代替,uWSGI性能在runserver之上。uWSGI是一种服务,uwsgi是其支持的一种协议。---ini:以哪个配置启动。--stop:停止文件中进程。nginx用于负载均衡。

2024-04-14 23:39:29 90 1

原创 2.06-数据类型-有序集合

zrange操作:数组里面嵌套元组 [(元素, 分数值),(元素, 分数值),(元素, 分数值)]并集 交集,遇到相同时,也可以指定分值行为,此处为取最大值。并集 交集,遇到相同时,默认分值 做 累加。ZREVRANK: 降序查询第几位。有序集合只有并集和交集,没有差集。ZRANK :升序查询第几位。指定两有序集合的 权重。

2024-04-14 22:33:07 134 1

原创 2.0.5-数据类型-集合

但某些时候,底层是数组,如果value都是整形并且个数512个以内,那么底层退化为数组,如果value有字符串,那么底层是hash结构。OBJECT encoding + 键值 : 查看底层结构 (hash or 整形数组)512个以下整形时,底层是数组,而且已排好序,用二分查找,提高了查找效率。寻址比列表快,只是一次hash计算,下面也提供了命令。不需要提前声明一个空集合,添加元素时自动创建。当加入字符串时,底层变为hash,元素变无序。python中操作和终端基本类似。返回python的集合。

2024-04-14 14:24:04 173 2

原创 2.04-数据类型-哈希-3

单进程单线程,如果数据量大,全部rehash,耗时,把迁移的逻辑分散在读取、更新等命令上。扩容后的查找也是二次的,有两个座位表,查找不用遍历,只需要计算哈希值,所以不会很耗时。redis中 处理哈希碰撞方式,扩容规则,座位重排, 与python中不一样。python集合与字典一样,只是没有存储value值。python字典底层用哈希,字典无序是因为会扩容。哈希碰撞,扩容,座位重排(rehash)单链法,如果某一位置哈希碰撞过多,耗时。redis中的集合不是完全的哈希结构。

2024-04-14 11:05:13 210 1

原创 2.02-数据类型-哈希-2

utf8 防止有中文存入,默认情况下mysql中文字符集不是utf8。查数据时,再存缓存更高效, 修改时,不更新缓存,做清空缓存操作。执行数据库同步,第一次会进行很多基础表初始化的同步。hdel是删除哈希某个字段,此处时删除整个键值对。能直接启动,表示配置没有问题。默认 应用名_模型类名。第一次访问缓存没有数据。命令行模式,创建用户。

2024-04-14 00:40:36 198 1

原创 2.02-数据类型-哈希-1

底层用压缩列表存储,ziplist实现,如果上面两条件任一不满足,那么redis就不用ziplist来存储。2、如果value用json存储,python还需要json.load操作, 哈希存储可以直接取操作。键值 h1不需要单独初始化创建,与字段 field(name)一起创建。1、节约内存:name,age拆出来存 要比 拿哈希存存费内存。批量更新,参数为字典,与命令行不一样,命令行按顺序列出来即可。1、只能对键进行过期功能,不能对field进行过期功能。2、不满足上面2条件时,耗内存。

2024-04-13 23:12:34 176

原创 2.01-位图操作

当前位不够时,会扩位,按最小字节数原则进行扩位,先扩一个字节(8位),每位初始化为0。set 字符串在内存中以二进制存储,get 得到二进制数据转换为可视数据。位图操作就是redis提供一些命令,可以直接操作二进制的位。没a的二进制0位设置为1,无可视字符显示时,会乱码。如果偏移量大,费内存(位的扩展)有可视字符显示时,不会乱码。直接操作一个不存在的键值。参数为字节索引,不是位索引。value只为0或者1。位运算省内存,速度快。

2024-04-13 20:11:41 166

原创 1.06-pyredis操作redis

如果生产者和消费者用socket通信,还不如生产者直接和邮箱服务器通信。pip3 freeze 按照一定格式输出已安装包, -i不区分大小写。先进先出,学名队列, 中间层叫任务队列,作用:平衡生产者消费者效率。客户端 django 邮箱服务器。输出默认是字节串数组,可以将字节串转为字符串。celery 框架 专门构造生产者消费者模型。建立连接时,需要选择哪个库 db,消费者 brpop 阻塞 右出。字符串批量操作,没有返回None。生产者 lpush 左进。

2024-04-13 00:32:52 206

原创 1.05-数据类型-列表

2, 发邮件场景,与对方服务器有通信,django将操作丢给生产者去做。因为redis单进程单线程,list尽量在两端操作,遍历耗时、、更新操作少用,因为要遍历, 首尾速度快。4, 尽量不使用,数组大的时候耗时。没有对应键值,弹出失败返回 nil。1, LTRIM 保留指定范围元素。3, 右侧弹出,左侧插入。

2024-04-12 23:38:06 113 1

原创 1.04-数据类型-字符串-2

2、删除数量大于某一个数据时,认为还有可删除的,继续删除(while);但是到一定时间,因为单进程单线程,又会终止删除操作(time_is_limit)以前只有方案2,会出现设置值了,但是过期时间没有设置的情况(因为网络丢包等)一个容器中存放数据,当某个数据最近使用后,调换位置放到最上面。黄色区域数据相较于其他区域数据很少使用,删除黄色区域数据。永远最近使用的在最上面,最近没使用的在最下面!当突然数据量大增的时候,前面删除机制来不及删除。可以删除没有配置到期时间的key。set ex 为字符串独有。

2024-04-11 23:42:18 197

原创 1.03-数据类型-字符串-1

正式环境中可以把清库命令禁止掉。MGET 没值就返回nil。nil 表示设置失败。

2024-04-11 22:52:29 106

原创 1.02-redis配置及基础命令

配置中redis默认监听127.0.0.1,其他机器连接不上,django和redis不在一个服务器就连接不上,无密码连接也能进终端,但是ping会失败,可以输入AUTH + 密码。1000多行 , 黑色为配置, 蓝色为备注, 注意配置文件格式问题。注释掉bind配置,当前机器上有几个网卡,都会对其绑定。/etc/组件名/ 路径下通常有对应配置。直接启动指定配置文件,有报错信息。备份后,修改用户和用户组。-a(校验) + 密码。info + 指定内容。0库中多了一个key。

2024-04-11 21:34:00 203

原创 Redis阶段-1.01-初识redis

redis之前瓶颈就是内存限制,3.0中官方给出集群方案,3.0以前国内有golang(高并发语言)包裹在redis上一款框架(codis,好用,性能好,由于3.0中官方给出的集群方案),横向去扩展。mysql 磁盘性存储会遇到查询瓶颈,某个数量级时会慢, 用了内存做辅助,用到了内存存储区,缓存高频查询数据。mongodb 非关系型数据库 ,借助了内存,把热数据交换到内存中,数据还是在磁盘中有一份。redis完全基于内存,纯内存型数据库,内存数据读写是单进程单线程。并发:每秒处理请求数量。

2024-04-10 23:27:41 194

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除