概述
一、什么是Redis
一个开源、使用ANSIC语言编写、支持网络、可基于内存,也可持久化的日志型、Key-Value数据库,提供多种语言的API
二、特点
1〉速度快
2〉键值对的数据结构服务器
3〉简单稳定
4〉持久化
5〉主从复制
6〉高可用和分布式转移
7〉提供多种语言的API
三、应用场景
1〉缓存数据库
2〉排行榜
3〉计数器应用
4〉社交网络
5〉消息队列
四、Redis值的类型
前面说过Redis是个key-value的缓存数据库
其中value有以下几种类型:String、hash、list、set、zset
接下来就一一学习
4.1 String
可以是字符串(包括XML 、JSON),数字(整形、浮点数),二进制(图片、音频、视频),最大不能超过512MB
常用命令
设值
set [key] [value] //设值key-value
set [key] [value] ex [时间] //设置key-value,并且在【时间】毫秒内失效
setnx [key] [value] //不存在键【key】时,返回1设置成功;存在的话失败0
获取值
get [key] //存在则返回value, 不存在返回nil
批量设值和获取
mset [key1] [value1] [key2] [value2]....
mget [key1] [key2] ... // 存在的key则返回value,不存在的key则返回nil
整数相关指令
incr [key] //必须为整数,自加1。非整数返回错误,没有这个[key]的话则从0自增返回1
decr [key] //整数键[key]的值减1
incrby [key] 2 //整数键[key]的值+2
decrby [key] 2 //整数键[key]的值 -2
字符串相关指令
append [key] [value] //在[key]原有值的后面追加【value】
strlen [key] //获取长度
getrange [key] [第几位开始] [第几位结束] //截取字符串
4.2 Hash
哈希hash是一个string类型的field和value的映射表
hash特适合用于存储对象,比如 hmset user:1 name zc age 18 //设置id为1的user对象的姓名及年龄
常用命令
设值 hset [key] [field] [value]//成功返回1,失败返回0
取值 hget [key] [field] //取不到返回nil
删值 hdel [key] [field] //返回删除的个数
计算个数 hlen [key] //返回field个数
批量设值 hmset [key] [field1] [value1] [field2] [value2] //返回OK
批量取值 hmget [key] [field1] [field2]
判断field是否存在 hexists [key] [field1] //若存在返回1,不存在返回0
获取所有field hkeys [key]
获取 [key] 所有value hvals [key]
获取 [key] 所有field与value hgetall [key]
增加 hincrby [key] [field] 1
hincrbyfloat [key] [field] 2 //浮点型加2
4.3 list
用来存储多个有序的字符串,一个列表最多可存2的32次方减1个元素
因为有序,可以通过索引下标获取元素或某个范围内元素列表,
列表元素可以重复
常用命令
添加
rpush //从右向左插入
lrange //从左到右获取列表所有元素
lpush //从左向右插入
查找
lrange [key] start end //索引下标特点:从左到右为0到N-1
lindex [key] -1 //返回最右末尾
llen [key] //返回当前列表长度
lpop [key] //把最左边的第一个元素删除
rpop [key] //把最右边的元素删除
4.4 set
保存多元素,与列表不一样的是不允许有重复元素,且集合是无序,一个集合最多可存2的32次方减1个元素,除了支持增删改查,还支持集合交集、并集、差集
常用命令
exists [key] //检查[key]键值是否存在
sadd [key] [元素1] [元素2] [元素2] //向[key]插入3个元素,返回3,若再加入相同的元素,则重复无效,返回0
smembers user //获取 [key]的所有元素,返回结果无序
srem [key] [元素] //返回1,删除元素
scard [key] //返回2,计算元素个数
4.5 zset
有序集合,常用于排行榜,如视频网站需要对用户上传视频做排行榜,或点赞数
与集合有联系,不能有重复的成员
五、缓存雪崩与穿透
雪崩是指:当Redis中没有该数据(被清除或者刚启动时),此时大量用户同时请求该数据,造成直接访问数据库的情况
解决方案:
1)设置常用数据永不清除
2)加互斥锁,保证只有一个请求到数据库中获取数据,并将数据存入Redis中
穿透是指:请求访问一个不存在在数据,Redis和数据库中都没有该数据,但一直再请求
解决方案:
将数据库中的数据查询出来放到布隆过滤器中,当Redis中没有,先到布隆过滤器中查询,存在的话再到数据库中查询,否则拒绝请求
六、Redis持久化
Redis有两种持久化的机制
6.1 RDB
将当前进程的数据生成快照文件(.rdb)保存到硬盘中,可以手动触发或者自动触发
手动触发有save、bgsave两种指令
save:阻塞当前Redis,直到RDB完成,若内存数据较多,可能阻塞时间较长
bgsave:Redis通供fork操作创建子线程,由子线程完成持久化,阻塞时间很短
当使用客户端的shutdowm操作停止Redis,如果没有开启AOF持久化,自动执行bgsave
使用方式
命令:config set dir /usr/local //设置rdb文件保存路径
备份:bgsave //将dump.rdb保存到usr/local下
恢复:将dump.rdb放到redis安装目录与redis.conf同级目录,重启redis即可
优点:
1,压缩后的二进制文,适用于备份、全量复制,用于灾难恢复
2,加载RDB恢复数据远快于AOF方式
缺点:
1,无法做到实时持久化,每次都要创建子进程,频繁操作成本过高
2,保存后的二进制文件,存在老版本不兼容新版本rdb文件的问题
6.2 AOF
AOF可以实时持久化
使用方式
1、开启:redis.conf 设置:appendonly yes (默认不开启,为no)
默认文件名:appendfilename "appendonly.aof"
2、将appendonly.aof放到dir参数指定的目录
3、启动Redis,Redis会自动加载appendonly.aof文件
AOF其他相关参数
appendfsync always //每收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用
appendfsync everysec //每秒强制写入磁盘一次,性能和持久化方面做了折中,推荐
no-appendfsync-on-rewrite yes //正在导出rdb快照的过程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 //aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-min-size 64mb //aof文件,至少超过64M时,重写
6.3 Redis重启时两种机制加载的优先顺序
当开启AOF时,先判断AOF是否存在,存在即加载AOF
不存在,则判断是否存在RDB,加载RDB
最后
以上就是感动电脑为你收集整理的Redis(1) —— 入门一、什么是Redis二、特点三、应用场景四、Redis值的类型五、缓存雪崩与穿透六、Redis持久化的全部内容,希望文章能够帮你解决Redis(1) —— 入门一、什么是Redis二、特点三、应用场景四、Redis值的类型五、缓存雪崩与穿透六、Redis持久化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复