1.缓存穿透?解决方案
-
穿透:查询一个一定不存在的数据,由于缓存中都没有,这些请求短时间内直接落在了数据库上,导致数据库异常。
-
解决方案:
-
持久层查询不到就缓存空结果,查询时先判断缓存中是否exists(key) ,如果有直接返回空,没有则查询后返回
-
2.缓存雪崩?解决方案
-
雪崩:缓存大量失效的时候,引发大量查询数据库
-
解决方案:
-
①用锁/分布式锁或者队列串行访问
-
②缓存失效时间均匀分布
-
3.List命令和应用场景
-
赋值lpush key value1[value2] 将一个或多个值插入列表头部(从左侧添加)rpush key value1[value2] 在列表中添加一个或多个值(从右侧添加)lpushx key value 将一个值插入已存在的列表头部,如果列表不存在,操作无效rpushx key value 将一个值插入已存在列表的尾部,如果列表不存在,操作无效
-
取值llen key 获取列表长度lindex key index 通过索引获取列表中的元素lrange key start stop 获取列表指定范围内的元素
-
删除语法lpop key 移除并获取列表的第一个元素(从左侧删除)rpop key 移除并获取列表的最后一个元素(从右侧删除)ltrim key start stop 对一个列表进行修剪,让列表只保留指定区间内的元素,其他元素都将被删除
-
修改语法lset key index value 通过索引设置列表元素的值linsert key before|after world value 在列表元素的前或后插入元素(在world前或后插入value)
-
高级语法rpoplpush source destination 移除列表的最后一个元素,并将该元素添加到另外一个列表并返回示例: rpoplpush a1 a2 :a1列表最后元素移除a2的左侧
-
应用场景分页功能 个人详情 热点新闻 用户注册流程
4.Set命令和应用场景
-
赋值sadd key member1 [member2] 向集合添加一个或多个成员
-
取值scard key 获取集合的成员数smembers key 返回集合中的所有成员sismember key member 判断member元素是否是集合key的成员srandmember key [count] 返回集合中一个或多个随机数
-
删除语法srem key member1[member2] 移除集合中一个或多个成员spop key [count] 移除并返回集合中的一个随机元素smove source destination member 将member元素从source集合移动到destination集合
-
差集sdiff key1 key2 返回给定所有集合的差集(左侧)sdiffstore destination key1 [key2] 返回给定所有集合的交集并存储在destination中
-
交集sinter key1 [key2] 返回给定所有集合的交集(共有数据)sinterstore destination key1 [key2] 返回给定所有集合的交集并存储在destination中
-
并集sunion key1 [key2] 返回所有给定集合的并集sunionstore destination key1 [key2] 所有给定所有集合的并集存储在destination中
-
应用场景抽奖 共同关注 判断存在问题 保存唯一ip
5.ZSet命令和应用场景
-
赋值zadd key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
-
取值zcard key 获取有序集合的成员数zcount key min max 计算在有序集合中指定区间分数的成员数zrank key member 返回有序集合中指定成员的索引
zrange key start stop [withscores] 通过索引返回有序集合中指定区间的成员(低到高)zreveange key start stop [withscores] 通过索引返回有序集合中指定区间的成员(高到底)
-
删除del key 移除集合zrem key member [member...] 移除有序集合中一个或多个成员zremrangebyrank key start stop 移除有序集合中给定的排名区间的所有成员(低到高)zremrangebyrank key min max 移除有序集合中给定的分数区间的所有成员
-
应用场景
车型排行榜 热点新闻排行榜 成绩排行榜 粉丝贡献度
6.主键索引和非主键索引的区别?
非主键索引的叶子节点存放的是主键的值,而主键索引的叶子节点存放的是整行数据,其中非主键索引也被称为二级索引,而主键索引也被称为聚簇索引。