rediszset怎么排序_⾃问⾃答学习redis(⼀)
【1】什么是redis,谈谈你对redis的理解
redis 就是⼀个数据库,不过与传统数据库不同的是, redis 的数据是存储在内存中的,所以读写速度⾮常快,因此 redis 被⼴泛应⽤于缓存⽅向。redis 提供了五种数据类型来⽀持不同的业务场景。
【2】redis常见数据结构以及使⽤场景分析
1. String,常规计数场景:微博数,粉丝数,页⾯访问次数等,涉及命令:incr、decr、incrby、decrby。
2. List,列表场景:微博的关注列表,粉丝列表,消息列表,涉及指令:lrange(进⾏分页查询)
3. Hash,存储对象信息:⽤户信息,商品信息。
4. Set,求交集场景:共同关注、共同粉丝、共同喜好,涉及指令:sinterstore。
5. ZSet,排⾏榜场景:⽹易云⾳乐歌曲排⾏榜、在线⽤户列表,直播弹幕消息。
【3】redis设置过期时间了解吗
redis中有个设置时间过期的功能,即对存储在 redis 数据库中的key可以设置⼀个过期时间。作为⼀个缓存数据库,这是⾮常实⽤的。如我们⼀般项⽬中的token或者⼀些登录信息以及短信验证码都是有时间限制的,按照传统的数据库处理⽅式,⼀般都是⾃⼰判断过期,这样⽆疑会严重影响项⽬性能。使⽤redis的expire指令可以很好的完成这个需求。
【4】redis是怎么对过期的key进⾏删除的?
定期删除+惰性删除。
定期删除:redis默认是每隔 100ms 就随机抽取⼀些设置了过期时间的key,检查其是否过期,如果过期就删除。注意这⾥是随机抽取的。为什么要随机呢?你想⼀想假如 redis 存了⼏⼗万个 key ,每隔100ms就遍历所有的设置过期时间的 key 的话,就会给 CPU 带来很⼤的负载!
惰性删除 :定期删除可能会导致很多过期 key 到了时间并没有被删除掉。所以就有了惰性删除。假如你的过期 key,靠定期删除没有被删除掉,还停留在内存⾥,除⾮你的系统去查⼀下那个 key,才会被redis给删除掉。这就是所谓的惰性删除,也是够懒的哈!
【5】redis 持久化机制
RDB、AOF。
RDB⽅式:创建数据库快照来持久化redis服务器的数据,将数据保存到rdb⽂件中。
AOF⽅式:开启AOF持久化后每执⾏⼀条会更改Redis中的数据的命令,Redis就会将该命令写⼊硬盘中的AOF⽂件,从⽽实现redis的持久化,并且还会定时的重写AOF⽂件,以免⽂件过⼤。
【6】AOF 重写
AOF重写机制并不是对原AOF⽂件进⾏重写,⽽是创建⼀个临时的AOF⽂件,然后根据redis的键值对来实现数据持久化,最后再覆盖原AOF⽂件。重写后的AOF⽂件和原AOF⽂件存储的数据⼀样,但是⼤⼩会更轻。
【7】redis和Memcached的区别
1. redis⽐Memcached提供了更多样化的数据结构
2. redis⽀持持久化,⽽Memcached不⽀持持久化。
3. redis⽀持数据备份,如master-slave模式的数据备份,⽽Memcached不⽀持。
【8】redis是单线程还是多线程?为什么那么快?
redis是单线程的,因为redis存储的数据都是在内存的,所以访问速度会⽐关系型数据库快。
【9】redis的五种数据类型
String、List、Hash、Set、ZSet(SortedSet)
redis五种数据结构
【10】zSet的底层实现
zSet的底层有两种:ziplist和skiplist。
使⽤ziplist的两个条件:
1. 元素个数⼩于128。
2. 所有value的长度⼩于64字节。
否则使⽤skiplist来实现zset。
PS:
ziplist介绍:
ziplist编码的有序集合使⽤紧挨在⼀起的压缩列表节点来保存,第⼀个节点保存member,第⼆个保存score。ziplist内的集合元素按score 从⼩到⼤排序,score较⼩的排在表头位置。
skiplist介绍
跳表(skip List)是⼀种随机化的数据结构,基于并联的链表,实现简单,插⼊、删除、查的复杂度均为O(logN)。简单说来跳表也是链表的⼀种,只不过它在链表的基础上增加了跳跃功能,正是这个跳跃的功能,使得在查元素时,跳表能够提供O(logN)的时间复杂度。
【11】skiplist的搜索和插⼊过程
搜索:⾸先在最⾼层单链表开始,如果不到就往下⼀层单链表,直到到为⽌。
插⼊:插⼊之前需要先经历搜索过程,到了插⼊的位置之后,随机在⼀层中分配这个新节点。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。