Go面试看这里了~(二十七)

161 篇文章 12 订阅

原文地址:Go面试看这里了~(二十七)

1、Redis的watch?

Redis Watch命令用于监视一个(或多个) key ,如在事务执行之前这个(或这些) key 被其它命令改动,那么事务将被打断。

2、Redis的SETNX和SETEX?

SETNX:SET if Not eXists(如果不存在,则 SET)的简写,语法为【SETNX key value】。

SETEX:将值value关联到key,并将key的生存时间设为seconds (以秒为单位),如key已存在,SETEX将覆写旧值,语法为【SETEX key seconds value】。

3、Redis的适用场景?

适用场景:数据高并发的读写、海量数据的读写、对扩展性要求高的数据、 配合关系型数据库做高速缓存、缓存高频次访问的数据、降低数据库io、分布式架构、做session共享、可持久化特定数据、利用zset类型可以存储排行榜、利用list的自然时间排序存储最新n个数据等。

不适场景:需要事务支持(非关系型数据库)、基于SQL结构化查询储存等。

4、Redis的zset?

有序集合(zset)对象的编码可以是ziplist或者skiplist。

结构图如下:

zset选择编码的条件如下:

  1. 元素数量小于128个使用ziplist编码。

  2. 所有member长度都小于64字节使用ziplist编码。

  3. 不能满足上面两条件的使用skiplist编码,以上两条件也可以通过Redis配置文件zset-max-ziplist-entries选项和 zset-max-ziplist-value进行修改。

  4. 对于REDIS_ENCODING_ZIPLIST编码的zset, 只要满足以上任一条件,则会被转换为REDIS_ENCODING_SKIPLIST编码。

ziplist编码的zset使用紧挨在一起的压缩列表节点来保存,第一个节点保存member,第二个保存score,ziplist的集合元素按score从小到大排序,实质是一个双向链表,虽然元素是按score有序排序,但ziplist的节点指针只能线性地移动,所以在ziplist编码的zset中, 查找某个给定元素的复杂度为O(N)。

skiplist编码的zset底层为一个被称为zset的结构体,此结构体中包含一个字典和一个跳跃表,跳跃表按score从小到大保存所有集合元素,查找时间复杂度为平均 O(logN),最坏 O(N),字典则保存着从member到score的映射,如此可以用 O(1) 的复杂度来查找member对应的score值,虽同时用两种结构,但会通过指针来共享相同元素的member和score,因此不会浪费额外的内存。

跳表(skip List)是一种随机化数据结构,基于并联的链表,实现简单插入、删除、查找,复杂度均为O(logN),跳表也是链表的一种,只是在链表的基础上增加了跳跃功能,正是此功能使得在查找元素时,跳表能够提供O(logN)时间复杂度。

5、Redis的zset的操作命令?

  1. zadd(key, score, member):向名称为key的zset中添加元素member,score用于排序,如果该元素已经存在,则根据score更新该元素的顺序。

  2. zrem(key, member):删除名称为key的zset中的元素member。

  3. zincrby(key, increment, member):如果在名称为key的zset中已存在元素member,则该元素的score增加increment,否则向集合中添加该元素,其score的值为increment。

  4. zrank(key, member):返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若无member元素返回nil。

  5. zrevrank(key, member):返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若无member元素返回nil。

  6. zrange(key, start, end):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素。

  7. zrevrange(key, start, end):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素。

  8. zrangebyscore(key, min, max):返回名称为key的zset中score >= min且score <= max的所有元素。

  9. zcard(key):返回名称为key的zset的基数。

  10. zscore(key, element):返回名称为key的zset中元素element的score。

  11. zremrangebyrank(key, min, max):删除名称为key的zset中rank >= min且rank <= max的所有元素。

  12. zremrangebyscore(key, min, max):删除名称为key的zset中score >= min且score <= max的所有元素。

至此,本次分享就结束了,后期会慢慢补充。

以上仅为个人观点,不一定准确,能帮到各位那是最好的。

好啦,到这里本文就结束了,喜欢的话就来个三连击吧。

扫码关注公众号,获取更多优质内容。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值