Redis由来
- 08 意大利 antirez 统计网站访问信息,使用 mysql(硬盘读写)进行记录。随着数据量大,产生性能瓶颈。产生将数据存储在内存中的想法。
- 内存读写要快很多,需要添加持久化功能(数据备份)。
- 全称 remote dictionary service
- 端口 6379,(嘲笑歌星,暗语,愚蠢的意思)
Redis特性
- 数据操作在内存,速度快
- 命令执行的单线程
- 结构简单,key-value
- Redis keys的最大值:512M
- Value也是有最大值的,根据数据类型不同,视情况而定
- 功能丰富 持久化
- io的多路复用(阻塞性io,非阻塞io,多路复用)
Redis有16个库,配置文件可配置最多16个(database 16)
配置文件 redis.confset huihui 666
//设置添加key-valueselect 8
//切换到库8
库数据是隔离的
可以做分库处理,不建议使用Redis数据库进行分库flush
//全库清空(所有库)get huihui
//查询rename huihui huihui1
//重命名keys *
//查询所有,不建议使用expire huyihui 10
//设置过期时间del huihui
//删除
Redis常见数据类型以及应用场景解析
Redis一共8大数据类型,常用的5种。
String
value String 可以存number float bits等等
strlen huihui
//获取字符长度getrange huihui 0 5
//截取字符串set intkey 1
get intkey
incr intkey
incr——》主键set f 2.6
incrbyfloat f 7.3
单线程 不用担心并发
setnx值存在的时候就不会成功——》分布式锁
应用场景
incr 主键 分布式ID 自增 统计数据 浏览数 点赞数
setnx 分布式锁
设置时间跟设置锁是两个命令 原子性 并发问题 必须一起执行
lua脚本 脚本语言 狗皮膏药,保证多个redis命令的原子性
Hash
hset huihui age 18
hget huihui age
hmset huihui1 age 18 addr changsha
//批量设置
此处可以josn存为String,不过不适合修改单个值hmget huihui age addr
//批量获取hgetall huihui
//获取全部hincrby huihui age 1
//增加岁数hexists huihui age
//判断是否存在(返回0/1)hdel huihui del
//删除
应用场景
String能做的Hash能做
Hash能做的,String不一定
list
元素是可以重复的!!!有序的,从左到右有序的
lpush a
lpush b c
lrange queue 0 -1
//结果"c","b","a"rpush queue d e
lrange queue 0 -1
//结果"c","b","a","d","e"
lpop queue
//左侧出rpop queue
//右侧出
blpop queue 10
//阻塞弹出等到有数据为止,不然等到设置的超时时间
应用场景
队列(有序)
刷朋友圈,按时间有顺序(lpop先进后出,rpop先进先出)
没法持久化,不建议用来做队列
消息中间件 kafka rabbit
set
set 不重复 无序
无序:放进去的时候无序,get时候是有序的
sadd huihuiset a b c d e f g
smembers huihuiset
//出来是无序的,是因为放进去的时候无序,故执行多次,出来的顺序是一致的srandmember huihuiset 2
//随机取两个spop huihuiset
//随机弹一个(弹出后就不在原对象中)sismember huihuiset a
//判断元素是否存在sdiff huihuiset huihuiset1
sdiff获取前面一个集合有且后面一个集合没有的数据sunion huihuiset huihuiset1
//取交集sinter huihuiset huihuiset1
//取并集
应用场景
无序:抽奖(抽奖不用random,原因慢,消耗性能),红包,点赞签到
交集,并集:共同关注的人,可能认识的人
zset
有序集合
score score相同的话 根据ascii码排序
zadd z1 10 a 20 b 30 c
zrange z1 0 -1
//分数从小到大排
zrange根据索引获取数据zrevrange z1 0 -1
//从大到小排zrangebyscore z1 20 30
//按照分数取 "b" "c"zrem z1 a
//rdis zem 命令用于移除有序集中的一个或多个成员,不存在的成员将被忽略。当 key 存在但不是有序集类型时,返回一个错误。zincrby z1 20 b
//为b添加zcount z1 40 50
//返回40-50分的个数zrank z1 b
//返回索引
应用场景
统计
排名,排行榜
简历指导
技术点
- 深入了解redis,看过redis源码,知道redis数据的应用场景
- 不宜写过多无关的技术,大数据,前端写一条即可
- 扬长避短
- 足够的简约清晰
项目经验
- 可以美化
- 简约清晰,简约而不简单
- 项目描述
1,2,3 - 责任描述
1,2,3 - 技术点 用到了什么技术,解决了什么问题,有什么优点
- 面试时候,简历上的东西一定要非常熟悉
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。