string:简单的k,v值
1. SET/GET/APPEND/STRLEN: 2. INCR/DECR/INCRBY/DECRBY: 3. GETSET: 4. SETEX: 5. SETNX: 6. MSET/MGET/MSETNX:
list:列表的元素类型为string,按照插入顺序排序,在列表的头部或尾部添加元素
ziplist:连续内存块实现list结构,每个entry头部保存前后节点的长度信息,从而实现双端链表的功能
1. LPUSH/LPUSHX/LRANGE: 2. LPOP/LLEN: 3. LREM/LSET/LINDEX/LTRIM: 4. LINSERT: 5. RPUSH/RPUSHX/RPOP/RPOPLPUSH:
hash:彼此相关的信息的键值对
1. HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX: 2. HINCRBY: 3. HGETALL/HKEYS/HVALS/HMGET/HMSET:
Set, 存储不重复的元素
1.SADD/SMEMBERS/SCARD/SISMEMBER: 2. SPOP/SREM/SRANDMEMBER/SMOVE:
sorted set,有序集合
1.ZADD/ZCARD/ZCOUNT/ZREM/ZINCRBY/ZSCORE/ZRANGE/ZRANK: 2.ZRANGEBYSCORE/ZREMRANGEBYRANK/ZREMRANGEBYSCORE: 3.ZREVRANGE/ZREVRANGEBYSCORE/ZREVRANK:
原子性不支持回滚, 一致性有watch实现, 隔离性本身就是单线程,持久性不支持
使用 TxPipeline 或 TxPipelined 方法将 pipeline 命令使用 MULTI
和EXEC
包裹起来
将多个命令放入pipeline打包发送给sever,节省网络往返时间
锁住 uid,防止重复下单。
锁住库存,防止超卖。
锁住账户,防止并发操作。
分布式系统中共享同一个资源时往往需要分布式锁来保证变更资源一致性。
锁的基本特性,并且只能被第一个持有者持有。
高并发场景下临界资源一旦发生死锁非常难以排查,通常可以通过设置超时时间到期自动释放锁来规避。
锁持有者支持可重入,防止锁持有者再次重入时锁被超时释放。
锁是代码运行的关键前置节点,一旦不可用则业务直接就报故障了。高并发场景下,高性能高可用是基本要求。
先更新数据库-->删除缓存,下次读取无缓存时重建缓存
先更新缓存,缓存负责同步更新数据库
先更新缓存,缓存负责定期异步更新数据库
起因:大量缓存查不到,数据库中也没有
解决:将返回NULL的也存到缓存,插入数据的时候删除NULL缓存(或者设置短的超时时间,)
起因:热点数据key过期,大量请求数据库
解决(两种):
分布式锁:一个线程获取锁查数据库更新缓存,其他线程等待,直到缓存中存在了,直接取
异步后台更新:异步对过期key自动刷新
起因:缓存服务不可用,或者大量key同时失效,大量请求数据库
解决:
针对缓存服务不可用---架构层的监控报警完善
针对大量key同时失效---key随机超时或多级缓存(不同级别的key不用的超时时间)