一个php操作状态位状态的类

平时经常有通过二进制位来存储多个开关位,实现一个字段存多个开关的功能。每次操作位,难免容易出错,遂写了一个类简化操作,闲话少说上代码和使用方法。BitState类:<?php class BitState { private $maps = []; private $state = 0; public function __construct($state = ...

继续阅读 »

分布式锁的实现

1.Memcached分布式锁利用Memcached的add命令。此命令是原子性操作,只有在key不存在的情况下,才能add成功,也就意味着线程得到了锁。2.Redis分布式锁和Memcached的方式类似,利用Redis的setnx命令。此命令同样是原子性操作,只有在key不存在的情况下,才能set成功。(setnx命令并不完善,后续会介绍替代方案)3.Zookeeper分布式锁利用Zoo...

继续阅读 »

用redis实现分布式锁

Redis分布式锁的基本流程并不难理解,但要想写得尽善尽美,也并不是那么容易。在这里,我们需要先了解分布式锁实现的三个核心要素:1.加锁最简单的方法是使用setnx命令。key是锁的唯一标识,按业务来决定命名。比如想要给一种商品的秒杀活动加锁,可以给key命名为 “lock_sale_商品ID” 。而value设置成什么呢?锁的value值为一个随机生成的UUID。我们可以姑且设置成1。加锁...

继续阅读 »

memcache 命中率

连接上memcache,然后直接输入stats就可以得到当前memcache的状态。cmd_get :get命令(获取)总请求次数get_hits :总命中次数缓存命中率 = get_hits/cmd_get * 100%

继续阅读 »

redis命中率计算

edis提供了INFO这个命令,能够随时监控服务器的状态,只用telnet到对应服务器的端口,执行命令即可:telnet localhost 6379info在输出的信息里面有这几项和缓存的状态比较有关系:keyspace_hits:657389keyspace_misses:328365通过计算hits和miss,我们可以得到缓存的命中率:657389 / (328365 + 657389...

继续阅读 »