原文地址: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选择编码的条件如下:
-
元素数量小于128个使用ziplist编码。
-
所有member长度都小于64字节使用ziplist编码。
-
不能满足上面两条件的使用skiplist编码,以上两条件也可以通过Redis配置文件zset-max-ziplist-entries选项和 zset-max-ziplist-value进行修改。
-
对于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的操作命令?
-
zadd(key, score, member):向名称为key的zset中添加元素member,score用于排序,如果该元素已经存在,则根据score更新该元素的顺序。
-
zrem(key, member):删除名称为key的zset中的元素member。
-
zincrby(key, increment, member):如果在名称为key的zset中已存在元素member,则该元素的score增加increment,否则向集合中添加该元素,其score的值为increment。
-
zrank(key, member):返回名称为key的zset(元素已按score从小到大排序)中member元素的rank(即index,从0开始),若无member元素返回nil。
-
zrevrank(key, member):返回名称为key的zset(元素已按score从大到小排序)中member元素的rank(即index,从0开始),若无member元素返回nil。
-
zrange(key, start, end):返回名称为key的zset(元素已按score从小到大排序)中的index从start到end的所有元素。
-
zrevrange(key, start, end):返回名称为key的zset(元素已按score从大到小排序)中的index从start到end的所有元素。
-
zrangebyscore(key, min, max):返回名称为key的zset中score >= min且score <= max的所有元素。
-
zcard(key):返回名称为key的zset的基数。
-
zscore(key, element):返回名称为key的zset中元素element的score。
-
zremrangebyrank(key, min, max):删除名称为key的zset中rank >= min且rank <= max的所有元素。
-
zremrangebyscore(key, min, max):删除名称为key的zset中score >= min且score <= max的所有元素。
至此,本次分享就结束了,后期会慢慢补充。
以上仅为个人观点,不一定准确,能帮到各位那是最好的。
好啦,到这里本文就结束了,喜欢的话就来个三连击吧。
扫码关注公众号,获取更多优质内容。