网易云课堂上面的总结:
一.redis使用的场景?
answer:把用户信息缓存到redis。通过incr做id自增操作(例如单据编号自增)。常用的报表数据查询(hash).
二.常用数据结构?
1.string:简单的k_v类型。使用场景(微博上,粉丝数,常规计数)
常用命令:get set incr decr Mget
2.list:链表类型。使用场景:(微博的关注列表,粉丝列表)
常用命令:Lpush Rpush Lpop Rpop Lrange
3.set:集合,一堆不重复的组合,利用set可以存储一些集合性的数据。使用场景:共同关注,共同喜好,二度好友。
常用命令:Sadd(向集合中添加一个或多个成员) Spop(移除并返回集合中的一个随机元素) Smember(返回集合中的所有成员) Sunion(返回给定集合的所有并集)
4.sorted set:区别set的地方是,可以通过额外的score参数来为成员排序,并且插入是有序的,即自动排序。使用场景(排行榜,按照用户投票和时间排序)
常用命令:Zadd Zrange Zrem Zcard
三.最多往redis里面塞过多少条数据?
answer:五万条?
四.单台内存用完了怎么办?
关键点:最大内存阀值(maxmemory),内存回收策略(maxmemory-plicy),LRU算法
LUR(least recently used,最近最少使用)算法:根据数据的历史访问记录来淘汰数据
伍.如果缓存的数据比单台服务器的内存要大,怎么处理?
关键字:redis集群,redis cluster
场景:假如有20G数据需要存redis怎么办?
answer:做redis集群,假如一台服务器是4G内存,那么起码要七台,毕竟还有什么操作系统内存巴拉巴拉的。
集群就会引出redis_cluster。
那么redis怎么做内存分配呢?
例如火车票:每一节车厢可以做很多人,根据你的车票信息找到对应的座位,火车根据不同的座位号划分不同的车厢(这里车厢代表属于哪台服务器)
这个车票号怎么生成呢?
这叫要说到怎么计算slot(槽->车牌号),通过crc 16_hash(key)计算出唯一hash值,然后slot = hash % 16384(redis最大存储)
既然找到了车票号怎么通过车票号找到对应的车厢呢(服务器)?
假如不知道随机插入到第N台服务器,假如这个车牌号属于这个车厢,那么会返回ok,如果不属于则会重定向告诉你需要指向哪台服务器。
但是这会存在一个性能问题,假如1000个请求过来,每次都找错了,那不是本来1000次的请求要请求2000次?
这个时候可以把slot的计算放在客户端,客户端缓存slot的分配信息。然后我们就可以直接定位到redis_service,如果客户端发送的slot信息有误,那么当我们收到重定向响应的时候更新该slot分配信息。
六:数据放在redis有没有碰到过数据丢失的情况?
关键点:持久化机制,主从复制