redis是key-value,其中的value可能是map,这个map中键为了避免歧义被称为field
需要强一致性的数据不应该使用缓存。
- 它是基于内存的操作,CPU不是redis的瓶颈,可以轻松处理每秒几十万的请求。
- redis是单线程省去了很多上下文线程切换的时间。 从而不需要各种锁的性能消耗。增加性能可以使用单线程多进程的集群方案。
- 全程使用Hash结构,对一些数据储存进行了优化比如压缩表和跳表。
- redis使用多路复用技术。非阻塞IO内部采用epoll。
定期删除+惰性删除:
redis默认每过100ms进行随机抽取检查。
当读写一个已经过期的key时,触发惰性删除。
redis.conf的 maxmemory-policy 配置项。
即故意请求大量缓存中没有的key,会全部去请求数据库。
- 互斥锁:对数据库请求的互斥锁。
- 异步更新策略:无论是否取到值都返回,value维护一个缓存失效时间,过期后异步线程更新缓存。
- 拦截机制:例如布隆过滤器,维护一系列合法key,遇到非法直接返回。
即缓存同一时间大面积失效,后续大量连接直接请求数据库。
- 缓存失效时间加随机值。
- 互斥锁
- 双缓存
即同时多个子系统set同一个key。
- 数据如果不分片,可以使用redis本身的事务机制。
- 数据如果分片,使用分布式锁,有顺序要求则可以再加上时间戳。
查看所有或指定形式的key:KEYS */pattern
创建:SET key value
获取指定key的值:GET key
创建或加入:RPUSH key value
获取指定key中的元素:LRANGE key 0 10
获取列表长度:LLEN key
通过索引获取指定key中的元素:LINDEX key index
移除并获取指定key的元素:LPOP key
创建或插入:HSET key field value
获取指定key中所有field:HKEYS key
获取指定key中所有value:HVALS key
获取指定key中指定field的值:HGET key field
删除指定key中的指定field:HDEL key field