redis知识总结

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:

  1. redis key和value最大长度?
    官网上说key和value的最大长度都是512MB,从源码中只看到了setrange和append命令限制了长度是512MB,另外client_query_buffer的最大长度是1GB。

  2. redis如何实现乐观锁?
    乐观锁的实现大多指的是CAS事务,即利用watch命令事先watch下某个key,然后调用multi命令开始事务, 进行一系列操作, 最后调用exec执行事务。当exec时,如果发现之前watch的key被其他client修改过的话, 整个事务就被回滚(实际上根本就没有执行)

  3. redis 如何实现分布式锁?
    一般来讲是通过set key value nx px millisecond,当执行成功时即获得锁, 为避免死锁因此加上了过期时间。另外为了避免在获得锁之后,执行程序期间锁过期,程序结束后释放锁时错误地释放了其他进程刚刚获得的锁,因此value一般设置为一个随机值, 当value值跟本程序设置的一样时,才进行释放

  4. 如何正确的刷新redis,避免缓存不一致?
     我们在使用redis过程中,通常会这样做:先读取缓存,如果缓存不存在,则读取数据库。在更新数据库时, 无论是先更新数据库,再更新redis,还是先更新redis,再更新数据库, 都有可能由于更新程序宕机导致数据不一致。 解决方法是先删除redis缓存,再更新数据库,这样可以降低由于更新程序宕机导致的缓存不一致的概率。如果为了进一步降低概率的话,还可以在更新数据库前后都删除缓存。

你可能感兴趣的:(redis知识总结)