redis数据类型及其内部编码
数据类型 | 内部编码 | 常用命令 |
---|---|---|
string | embstr int raw(sds) | get set del |
hash | ziplist hashtable | hset hget del hmset hmget hdel hgetall |
set | intset hashtable | sadd smembers |
list | quicklist | lpush rpush |
sorted set | skiplist | zadd zrange |
FAQ:
redis key和value最大长度?
官网上说key和value的最大长度都是512MB,从源码中只看到了setrange和append命令限制了长度是512MB,另外client_query_buffer的最大长度是1GB。redis如何实现乐观锁?
乐观锁的实现大多指的是CAS事务,即利用watch命令事先watch下某个key,然后调用multi命令开始事务, 进行一系列操作, 最后调用exec执行事务。当exec时,如果发现之前watch的key被其他client修改过的话, 整个事务就被回滚(实际上根本就没有执行)redis 如何实现分布式锁?
一般来讲是通过set key value nx px millisecond,当执行成功时即获得锁, 为避免死锁因此加上了过期时间。另外为了避免在获得锁之后,执行程序期间锁过期,程序结束后释放锁时错误地释放了其他进程刚刚获得的锁,因此value一般设置为一个随机值, 当value值跟本程序设置的一样时,才进行释放如何正确的刷新redis,避免缓存不一致?
我们在使用redis过程中,通常会这样做:先读取缓存,如果缓存不存在,则读取数据库。在更新数据库时, 无论是先更新数据库,再更新redis,还是先更新redis,再更新数据库, 都有可能由于更新程序宕机导致数据不一致。 解决方法是先删除redis缓存,再更新数据库,这样可以降低由于更新程序宕机导致的缓存不一致的概率。如果为了进一步降低概率的话,还可以在更新数据库前后都删除缓存。