# 命令实现

# Lua

# 设计思路

redis一个节点维护一个Lua虚拟机,通过在rdb中持久化实现脚本的主备。

bitalostored使用了多Lua虚拟机的设计,Lua脚本以普通kv数据的方式,选择特殊的slot 2048存储在磁盘中,复用现有的raft主从同步机制。

注意: 管理界面无法迁移Lua脚本,需通过迁移命令手动迁移slot 2048。

# 原子性

redis在执行Lua脚本时,其他命令无法执行。

在bitalostored中,其他命令正常执行。Lua命令传入多个key,需保证相同的hash tag,通过对hash tag取模进行key加锁保证原子性。

# bitmap

# redis实现

redis的bitmap实现,存储的value值大小,和offset的大小有关系,和存储的bit数量关系不大。offset为1亿,即使存储1个bit位,也会占用12MB空间。

127.0.0.1:6379> setbit bit-demo 100000000 1
(integer) 0
127.0.0.1:6379> strlen bit-demo
(integer) 12500001

# bitalos实现

bitalos实现bitmap,使用的是压缩的bitmap,存储同样的数据,需要的空间仅为30B。

127.0.0.1:8111> setbit bit-demo 100000000 1
(integer) 0
127.0.0.1:8111> strlen bit-demo
(integer) 30
ZUOYEBANG