simba

POSIX 共享内存和 系列函数

*爱你&永不变心* 提交于 2021-01-19 03:25:39
在 前面 介绍了system v 共享内存的相关知识,现在来稍微看看posix 共享内存 和系列函数。 共享内存简单来说就是一块真正的物理内存区域,可以使用一些函数将这块区域映射到进程的地址空间进行读写,而posix 共享内存与system v 共享内存不同的是它是用虚拟文件系统(tmpfs)实现的,已经挂载在/dev/shm 下面。man 7 shm_overview 下面来看系列函数, 编译时候加上 -lrt 选项,即连接librt 库 (实时库) 功能:用来创建或打开一个共享内存对象 原型 int shm_open(const char *name, int oflag, mode_t mode); 参数 name:共享内存对象的名字, 必须以/打头,并且后续不能有其它/ ,形如/somename长度不能超过NAME_MAX(255) oflag:与open函数类似,可以是O_RDONLY、O_RDWR,还可以按位或上O_CREAT、O_EXCL、O_TRUNC等。 mode:此参数总是需要设置,如果oflag没有指定了O_CREAT,可以指定为0 返回值:成功返回非负整数文件描述符;失败返回-1 注意,不存在所谓的shm_close 函数,可以直接使用close 来关闭文件描述符。 功能:修改共享内存对象大小,shm_open不像shmget一样可以设置共享内存的大小

redis系列之数据库与缓存数据一致性解决方案

倾然丶 夕夏残阳落幕 提交于 2020-11-04 05:11:29
redis系列之数据库与缓存数据一致性解决方案 数据库与缓存读写模式策略 写完数据库后是否需要马上更新缓存还是直接删除缓存? (1)、如果写数据库的值与更新到缓存值是一样的,不需要经过任何的计算,可以马上更新缓存,但是如果对于那种写数据频繁而读数据少的场景并不合适这种解决方案,因为也许还没有查询就被删除或修改了,这样会浪费时间和资源 (2)、如果写数据库的值与更新缓存的值不一致,写入缓存中的数据需要经过几个表的关联计算后得到的结果插入缓存中,那就没有必要马上更新缓存,只有删除缓存即可,等到查询的时候在去把计算后得到的结果插入到缓存中即可。 所以一般的策略是当更新数据时,先删除缓存数据,然后更新数据库,而不是更新缓存,等要查询的时候才把最新的数据更新到缓存 数据库与缓存双写情况下导致数据不一致问题 场景一 当更新数据时,如更新某商品的库存,当前商品的库存是100,现在要更新为99,先更新数据库更改成99,然后删除缓存,发现删除缓存失败了,这意味着数据库存的是99,而缓存是100,这导致数据库和缓存不一致。 场景一解决方案 这种情况应该是先删除缓存,然后在更新数据库,如果删除缓存失败,那就不要更新数据库,如果说删除缓存成功,而更新数据库失败,那查询的时候只是从数据库里查了旧的数据而已,这样就能保持数据库与缓存的一致性。 场景二 在高并发的情况下,如果当删除完缓存的时候,这时去更新数据库

微信支付中分账功能 填坑指南V1

老子叫甜甜 提交于 2019-11-30 05:48:36
公司是做电商的,近期开发了一款小程序,准备线上线下同步销售玩具。这里就涉及到微信支付的功能,网上有很多教程,官方也有文档和Demo,因此微信支付还是比较容易实现的。 由于我们公司是和其他公司合作运营的,这就涉及到收入分配问题。比较传统的分配模式是月结、周结、日结这种,这些都无法实时到账。后来发现微信支付平台里,有个分账功能,正好解决这个问题。今天重点聊的这个功能,目前网络上资源很少,就写了一篇教程,希望能够帮助到其他开发员。 1、哪里开通? 这个功能在微信支付平台-产品中心-支付扩展工具。但是当你打开找到这个页面后,会发现你的支付平台并没有这个功能?! 是的,这是第一个坑。咨询了腾讯客服,回复说:这个功能目前是内测阶段,并没有全部开通,没有请耐心等待。所以,这个功能不是所有人都有。据妹纸说:如果你的流水每天正常、稳定,就有机会开通这个功能。 2、仔细看开发文档 腾讯的开发文档还是比较全面和规范的,要认真看,可能其中某一句话就是钥匙。比如这个文档 https://pay.weixin.qq.com/wiki/doc/api/allocation.php?chapter=26_3 要在以前的支付接口额外增加一个参数才可以,不看文档,估计调一天都不知道哪里有问题。 3、常见问题也很重要 这点似乎以前不怎么重视,但分账的常见问题,还是总结得很全面的。特别是红框里的那个地址

Linux常见操作

拟墨画扇 提交于 2019-11-28 15:17:52
Linux浏览器页面放大缩小:ctrl+'鼠标滚轮' 命令 选项 文件/目录 rm删除 关键字:remove rm -ri 可以查看要删除的文件 rm -rf r:递归删除文件内的子文件夹 f:强制删除 rm -rf * 删除所有文件 先ls查看 说明:1,删除当前文件夹,要返回上一级 2,直接删除目录,删除不了,要加入 -r 提示:例如 rm --help ls 查看详细 ls -la a 查看隐藏文件 l 查看长信息 cd 打开文件夹 cd ~到用户根目录 cd - 最近两个位置切换 cd / 到最终根目录 pwd 查看当前目录 touch 创建文件名 mkdir (创建)目录1 目录2 关键字:make directory mkdir -p (创建递归目录) 父目录/子目录 cp 复制文件/目录(特殊) 关键字:copy 复制文件:cp 文件名 路径 复制目录:cp -r 目录名 路径 cp lion/Simba/hello.py ./ 说明:根据路径选择文件,然后复制到指定文件夹下(./代表 到当前目录下) mv 剪切 文件/目录 路径 mv hello.py ./nihao.py 在当前路径 重命名 vim 文件名:创建并编辑文件:a/i/0, Esc, ,shift+':'(注意英文状态下输入":"),wq w:保存 q:退出 示例:vim lion/Simba/1