Redis Hash的应用:乐观所有(credishash)
Redis hash是Redis的一种数据结构,它是以field-value对的方式存储数据,可以更好地实现数据的存储和检索。Redis hash的应用之一是乐观锁。乐观锁是利用数据库本身特性来实现,它不会去抱住资源,而是采用合作方式尝试获取资源,假设资源在进行操作期间不被抢占,用户就可以成功获取该资源。
乐观锁的实现原理是:当用户去修改某个资源时,首先要向数据库查询这个资源;查询时会在资源的基础上添加一个Version字段;如果返回的Version字段和请求时的Version字段一致,那么就可以成功修改资源,然后将Version字段加1保存;如果查询和修改时Version字段不一致,则说明资源已经被用户在当前操作期间修改过,无法修改,报出异常。
Redis hash特别适合实现乐观锁,因为它以field-value对的形式存储资源,每次获取资源时都可以记录Version字段,从而安全的进行资源修改操作。值得一提的是,Redis官方提供了一把叫做Watch(监视)的锁,这种锁可以帮助实现乐观锁,所以如果需要使用Redis hash实现乐观锁,最好也使用Watch去完成,这样可以实现更高效的操作。
采用Redis hash实现乐观锁,大致代码如下:
// 设置乐观锁
MULTI
WATCH data
// 保存Version字段
HSET data Version 1
// 修改资源
HSET data key1 value1
// 递增Version字段
HINCRBY data Version 1
EXEC
上面的代码就可以简单实现Redis hash的乐观锁应用。Redis hash的特性使它在实现乐观锁时更加高效,用户可以安全的修改资源,使得整个系统能正常运行。