我是靠谱客的博主 感动电脑,最近开发中收集的这篇文章主要介绍Redis(1) —— 入门一、什么是Redis二、特点三、应用场景四、Redis值的类型五、缓存雪崩与穿透六、Redis持久化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、什么是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持久化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部