Redis基础快速掌握
Redis下载与安装
具体下载安装文章来源:https://blog.csdn.net/kkijhuybjju/article/details/107097241
Linux系统可能会遇到的问题没有wget命令(-bash: wget: 未找到命令)
解决:yum -y install wget
Nosql
- NoSQL:即
Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充
- 作用:
应对基于海量用户和海量数据前提下的数据处理问题
。 - 特征: 可扩容,可伸缩
- 大数据量下高性能
- 灵活的数据模型
- 高可用
-
Redis
Redis
- 概念:
Redis (REmote DIctionary Server)
是用 C 语言开发的一个开源的高性能键值对(key-value)数据库 - 特征:
- 数据间没有必然的关联关系
- 内部采用单线程机制进行工作
- 高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。
- 多数据类型支持
◆ 字符串类型 string
◆ 列表类型 list
◆ 散列类型 hash
◆ 集合类型 set
◆ 有序集合类型 zset/sorted_set - 支持持久化,可以进行数据灾难恢复
-
redis 数据存储格式
redis 自身是一个 Map,其中所有的数据都是采用 key : value 的形式存储 - 数据类型指的是存储的数据的类型,也就是 value 部分的类型,key 部分永远都是字符串
应用场景
-
为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等
redis为每个服务提供有16个数据库,编号从0到15
每个数据库之间的数据相互独立
-
db 基本操作
切换数据库: select index
数据移动: move key db
数据总量:dbsize
数据清除(一般禁用这两个指令): flushdb.flushall
Redis的基本操作
-
命令行模式工具使用
帮助信息查阅
help [command]
例如:help set
- 退出指令
quit
exit
快捷键:Ctrl+C
- 清除屏幕信息
clear
Redis基本数据类型
string 字符串
- 存储的数据:单个数据,最简单的数据存储类型,也是最常用的数据存储类型
- 存储数据的格式:一个存储空间保存一个数据
- 存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用
- 应用场景:很常见的场景用于统计网站访问数量,当前在线人数等。incr命令(++操作)
hash
hash存储格式
- 存储需求:对一系列存储的数据进行编组,方便管理,典型应用存储对象信息
- 需要的存储结构:一个存储空间保存多个键值对数据
- hash类型:底层使用哈希表结构实现数据存储
- 应用场景:例如存储、读取、修改用户属性(name,age,pwd等),双11有上限数量商品的抢购
hash存储结构优化
- 如果field数量较少,存储结构优化为类数组结构
- 如果field数量较多,存储结构使用HashMap结构
hash基本操作
list
list存储格式
- 存储需求:存储多个数据,并对数据进入存储空间的顺序进行区分
- 需要的存储结构:一个存储空间保存多个数据,且通过数据可以体现进入顺序
- list类型:保存多个数据,底层使用双向链表存储结构实现
- 应用场景:1.最新消息排行榜。2.消息队列,以完成多程序之间的消息交换。使用push操作将任务存放在list中,然后线程在用pop操作将任务取出进行执行。
list基本操作
set
set存储格式
- 新的存储需求:存储大量的数据,在查询方面提供更高的效率
- 需要的存储结构:能够保存大量的数据,高效的内部存储机制,便于查询
- set类型:与hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的
- 应用场景: 排行榜
- set 类型数据操作的注意事项
set 类型不允许数据重复,如果添加的数据在 set 中已经存在,将只保留一份
set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间
set基本操作
HelloWorld(Jedis版)
Java语言连接redis服务
Jedis
SpringData Redis
Lettuce
客户端连接redis
public class JedisTest { public static void main(String[] args) { //1.获取连接对象 // Jedis jedis = new Jedis("192.168.40.130",6379); Jedis jedis = JedisUtils.getJedis(); //2.执行操作 jedis.sadd("set1","abc","abc","def","poi","cba"); Long len = jedis.scard("set1"); System.out.println(len); //3.关闭连接 jedis.close(); } }
Redis持久化
RDB
将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据
-
RDB启动方式 —— save指令
手动执行一次保存操作:
save
save指令的执行会阻塞当前Redis服务器,直到当前RDB过程完成为止,有可能会造成长时间阻塞
-
RDB启动方式 —— save指令相关配置
-
RDB启动方式 —— bgsave指令
bgsave
:手动启动后台保存操作,但不是立即执行: -
RDB启动方式 —— bgsave指令相关配置
bgsave命令是针对save阻塞问题做的优化 -
RDB启动方式 —— bgsave指令工作原理
AOF
以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的。与RDB相比可以简单理解为由记录数据改为记录数据产生的变化
- AOF写数据过程
启动AOF相关配置
AOF写数据三种策略(appendfsync)
- always(每次):每次写入操作均同步到AOF文件中
数据零误差,性能较低,不建议使用。 - everysec(每秒):每秒将缓冲区中的指令同步到AOF文件中,在系统突然宕机的情况下丢失1秒内的数据
数据准确性较高,性能较高,建议使用,也是默认配置 - no(系统控制):由操作系统控制每次同步到AOF文件的周期整体过程不可控
AOF重写
随着命令不断写入AOF,文件会越来越大,为了解决这个问题,Redis引入了AOF重写机制压缩文件体积。AOF文件重写是将Redis进程内的数据转化为写命令同步到新AOF文件的过程。就是将对同一个数据的若干个条命令执行结果转化成最终结果数据对应的指令进行记录。
AOF重写作用
- 降低磁盘占用量,提高磁盘利用率
- 提高持久化效率,降低持久化写时间,提高IO性能
- 降低数据恢复用时,提高数据恢复效率
AOF重写规则
- 进程内具有时效性的数据,并且数据已超时将不再写入文件
- 非写入类的无效指令将被忽略,只保留最终数据的写入命令
如del key1、 hdel key2、srem key3、set key4 111、set key4 222等 如select指令虽然不更改数据,但是更改了数据的存储位置,此类命令同样需要记录 - 对同一数据的多条写命令合并为一条命令
如lpush list1 a、lpush list1 b、 lpush list1 c 可以转化为:lpush list1 a b c。
为防止数据量过大造成客户端缓冲区溢出,对list、set、hash、zset等类型,每条指令最多写入64个元素
AOF重写方式
- 手动重写 bgrewriteaof
-
auto-aof-rewrite-min-size size
auto-aof-rewrite-percentage percentage
aof_base_size
AOF工作流程
AOF重写流程
- 快速掌握Ajax-Ajax基础实例(Ajax返回Json在Java中的实现)
- 后端开发都应该掌握的Redis基础
- 从能做什么到如何去做,一文带你快速掌握Python编程基础与实战
- OC核心基础快速掌握之万丈高楼平地起
- 快速掌握Redis——第七招:运维必学 主从和监控sentinel(未排版)
- 快速掌握vim基础
- Java 基础 快速掌握2分法查找
- 快速掌握计算机基础
- C++进阶基础快速掌握--自学笔记(三)
- 韩语零基础快速掌握韩语学习的小技…
- 零基础:邪恶带你3步快速掌握iSCSI搭建
- 8天快速掌握Android视频(完整版--适合有JavaWeb基础学习)
- 快速掌握Redis——第六招:持久化 (数据备份与恢复)
- 教你快速掌握一个简单的Oracle定时任务-入门基础
- 快速掌握Ajax-Ajax基础实例
- 快速掌握JavaScript面试基础知识
- 快速掌握Redis——第五招:pub/sub 发布/订阅
- 5五分钟快速掌握网络的基础知识 包括IP地址、子网掩码的划分、传输介质等
- 快速掌握Python的捷径-Python基础前传(1)
- 快速掌握Ajax-Ajax基础实例