不可不读的Redis基本操作

Redis基本知识点

一、概念
Redis是一款内存高速缓存数据库。全称为:Remote Dictionary Server(远程数据服务),
该软件使用C语言编写,Redis是一个key-value存储系统,它支持丰富的数据类型,如:
String、list、set、zset(sorted set)、hash.
Redis采用的是基于内存的单进程单线程模型的KV数据库。官方提供的数据是可以达到10W+QPS。
二、Redis单线程处理效率高的原因
  1. 纯内除操作
  2. 核心是基于非阻塞的IO多路复用机制
  3. C语言使用,一般来说,C语言事先的程序“距离”操作系统更近,执行速度会更快
  4. 单线程反而避免了多线程的频繁上下文切换问题,预防了多线程产生的竞争问题。
  5. 底层实现了VM机制,避免了调度系统指令,从而浪费了一定的时间去移动和请求
三、支持的数据类型
String、list、set、zset(sorted set)、hash
字符串类型的值最大容量为512M
四、为什么redis要把所有数据放在内存中
redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度会严重影响到redis的性能。
五、Mysql当中有2000W数据,redis只存20W数据,如何保证redis当中的数据都是热点数据
redis内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。
对应的数据淘汰策略如下:
1、热点数据排序(点击次数)
既然热门数据,那么就需要有排序,使用redis中的zset数据类型是很自然的想法。数据中的某个唯一字段作为zset中的value,而点击次数作为score,记为click_zset。这样就可选出最热门的数据。而数据,则直接用HashMap存储。
2、热点数据时间(近期访问)
既然只能存1w条数据且需要是热门数据,那么,点击次数是一方面,时效性也是一方面,如何保证?可以另起一个zset,数据的字段为value,而每次点击时更新当前时间戳为其score,记为time_zset这样,就可以记录时间。在后台跑一个任务,间隔一定时间段删除两个zset中长时间没有发生点击事件的键,并删除hash数据,为产生的新数据腾出数据空间。
3、处理新热点数据
如果有空间,则保存到自己的hashmap,并将key存到两个zset中。
而没有空间时,就应该在click_zset中取出点击次数排在最前第1w位后面的键,删除对应的hash数据。然后看这1w个score的值,然后把key放入两个zset中即可。

六、其余问题
-- Redis集群的最大节点个数是多少?
16394个

七、redis指令
  1. keys pattern
  2. set key value
  3. get key
  4. setnx key value // 存在则不生效
  5. mset key1 vallue1 key2 value2 …
  6. mget key1 key2 …
  7. epire
  8. select 0 | move xxx 1
八、分布式锁
使用setnx代替sex
setxn key1 value1
expire key1 600

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值