Redis又称远程字典服务 原理是将数据存储到内存中,默认的端口号是6379,并且Redis默认有16个库 0-15(可以通过vim redis.conf指令找到Redis的库配置进行修改),可以通过select 数字 来选择库 并且库与库之间数据隔离 不会相互影响
特性:
1、数据操作都在内存中
2、命令执行的单线程
3、key-value结构 key最大值是512M(官网有具体说明 Redis data types tutorial | Redis)
4、功能丰富、持久化
5、IO多路复用
基本指令(也可以通过命令参考进行学习 Redis 命令参考 — Redis 命令参考)
set "key" "value" (存储键值到redis中)
get "key" (获取该key对应的value)
keys * (查询所有的value数据)
flush all 清空全库数据(可以根据持久化进行回退)
rename 原key名 新key名 (修改名称)
expire key名 过期时间(默认是秒)
ttl key名 获取key名对应的键值过期时间
del key名 删除该key对应的键值
mset "key" "value" "key1" "value1" "key2" "value2" (批量存储数据)
mget "key" "key1" "key2"(批量获取数据)
Redis常见的数据类型以及应用场景解析 list取值时间复杂度是o(1) 链表是o(n) 二叉树是幂次方 也就是olog(n)
八大数据类型
五大常用类型
String
可以存储的value:String、Number、Float
strlin "key" 对于String类型的value可以获取长度
append "key" "value" 对于String类型的value可以append拼接
getrange key" "起始下标" "结束下标 " 对于String类型的value可以截取获取指定范围内的值
incr "key" 对于int类型的value可以起到自增1主键-分布式ID 自增 统计数据-浏览数-点赞数
incrby "key" 数字 对于int类型的value可以起到自增对应的数字
浮点类型和int类型相似都可以自增 把incrby改成incrbyfloat就可实现
setnx 值在时后面都无法成功(多用于分布式锁)
setxx 值在时后面的才能成功
过期策略
主动过期 (定时过期) 定时器 一直在运行中只要过期就被删除
对内存友好: 不会存在过期值 对CPU不友好: 一直在运行中
被动过期 (惰性过期) 只有我去访问时才会判断key有没有过期 发现你有定时过期时 我产生异步
对CPU友好: 不会一直运行 对内存不友好: 可能产生键值积压
定期过期 (定期查询) 定期去查看是否有过期的键值 如果有就对其清理 如果没有就等待下一次运行 类似分布式调度
默认一次性拿取20个 Has桶
1、如果20个中没有过期的键值 会触发循环删除
2、如果20个中过期的超过1/10时也会触发循环寻找过期值并删除
3、每循环16次 我会去检查有没有超时 如果有超时就删除
淘汰机制
volatile-lru:根据LRU算法删除设置了超时属性的键 直到腾出足够的内存为止 如果没有可删除的键 退回到noeviction策略:当内存满了之后 可以取数据 不能存数据
LRU机制 least recently used 最久未使用