Runnable

strong to refuse


  • 首页

  • 标签

  • 归档

redis原子性

发表于 2018-12-10

ps.例

1
2
3
4
5
6
7
8
9
10
11
12
13
public function redis()
{
$redis = new Redis();
$redis->connect( '127.0.0.1', 6379 );
$key = 'testing';
for( $i = 0; $i < 1000; $i++ )
{
$num = (int)$redis->get( $key );
$num++;
$redis->set( $key, $num );
usleep( 1000 );
}
}

用两个终端执行上面的程序,发现val的结果是小于2000的值,那么可以知道,在程序中执行多个Redis命令并非是原子性的,这也和普通数据库的表现是一样的。
如果想在上面的程序中实现原子性,可以将get和set改成单命令操作,比如incr,或者使用Redis的事务,或者使用Redis+Lua的方式实现。

对Redis来说,执行get、set以及eval等API,都是一个一个的任务,这些任务都会由Redis的线程去负责执行,任务要么执行成功,要么执行失败,这就是Redis的命令是原子性的原因。

Redis本身提供的所有API都是原子操作,Redis中的事务其实是要保证批量操作的原子性。

事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。 不支持回滚(roll back)

ps.库存扣减实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$lua = <<<EOF
local buyNum = ARGV[1]
local goodsKey = KEYS[1]
local goodsNum = redis.call('get',goodsKey)
if goodsNum >= buyNum
then redis.call('DECRBY',goodsKey,buyNum)
return buyNum
else
return '0'
end
EOF;
$redis = new Redis();
$redis->connect( '127.0.0.1', 6379 );
$goodsKey = '_goods_';
$buyNum = 1;
$redis->eval( $lua, [ $goodsKey, $buyNum ], 1 );
$redis->evalSha( sha1( $lua ), [ $goodsKey, $buyNum ], 1 );
echo $redis->get( $goodsKey );

参考:

redis事务
redis脚本

open.tools

发表于 2018-06-25
  • splunk
  • kibana

microservices

  • kong
  • tars
  • dubbo
  • thrift

docker.php7.redis

发表于 2018-06-06 | 分类于 运维

docker build经常会报找不到redis包的问题
No releases available for package “pecl.php.net/redis”

1
2
3
4
5
6
ENV PHPREDIS_VERSION 3.0.0

RUN mkdir -p /usr/src/php/ext/redis \
&& curl -L https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/redis --strip 1 \
&& echo 'redis' >> /usr/src/php-available-exts \
&& docker-php-ext-install redis
  • How to install php-redis extension using the official PHP Docker image approach?

systemctl

发表于 2018-05-21 | 分类于 运维

1、systemctl是RHEL 7 的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。可以使用它永久性或只在当前会话中启用/禁用服务。

systemctl可以列出正在运行的服务状态

systemd-cgls以树形列出正在运行的进程,它可以递归显示控制组内容。如图:

2、如何启动/关闭、启用/禁用服务?

启动一个服务:systemctl start postfix.service
关闭一个服务:systemctl stop postfix.service
重启一个服务:systemctl restart postfix.service
显示一个服务的状态:systemctl status postfix.service
在开机时启用一个服务:systemctl enable postfix.service
在开机时禁用一个服务:systemctl disable postfix.service
查看服务是否开机启动:systemctl is-enabled postfix.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl –failed

PS:使用命令 systemctl is-enabled postfix.service 得到的值可以是enable、disable或static,这里的 static 它是指对应的 Unit 文件中没有定义[Install]区域,因此无法配置为开机启动服务。

说明:启用服务就是在当前“runlevel”的配置文件目录/etc/systemd/system/multi-user.target.wants/里,建立/usr/lib/systemd/system里面对应服务配置文件的软链接;禁用服务就是删除此软链接,添加服务就是添加软连接。

rpm打包

发表于 2018-05-11

装rpm包制作工具
sudo yum install -y rpm-build rpmdevtools

生成一个 rpm 包的骨架目录
rpmdev-setuptree

生成一个 spec 骨架文件
rpmdev-newspec helloworld.spec

打包
rpmbuild -ba SPECS/helloworld.spec

解压
rpm2cpio oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm | cpio -div

mysql术语摘要

发表于 2018-05-04

原文:https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_crash_recovery

阅读全文 »

codis3.2遍历指定slot所有key

发表于 2018-04-26 | 分类于 php

codis3.2不支持KEYS* 命令,而官方有个SLOTSSCAN命令,可以替代。

php Demo代码

阅读全文 »

git提交规范小工具Commitizen

发表于 2018-04-23 | 分类于 tools

安装步骤

Conventional commit messages as a global utility
Install commitizen globally, if you have not already.

npm install -g commitizen

Install your preferred commitizen adapter globally, for example cz-conventional-changelog

npm install -g cz-conventional-changelog

Create a .czrc file in your home directory, with path referring to the preferred, globally installed, commitizen adapter

echo ‘{ “path”: “cz-conventional-changelog” }’ > ~/.czrc

阅读全文 »

codis3.2后台展示一些说明

发表于 2018-04-02

Session 中的:
total: 从 Proxy 启动到当前时间已经处理的连接数
alive: 当前 Porxy 中正在处理的连接数
Commands 中的:
total: 从 Proxy 启动到当前时间已经处理的命令个数
fails: 从 Proxy 启动到当前时间处理失败的命令个数
rsp.errs: 从 Proxy 启动到当前时间 Redis 返回 Errror 的命令个数

cap解释

发表于 2018-03-30 | 分类于 分布式

一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。

阅读全文 »
1…345…7

laugh

lanmp, ELK, go, python, vue, 分布式, k8s, docker, CI/CD

62 日志
5 分类
26 标签
© 2020 laugh
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4