Redis相关知识点整理

Redis简介Redis是什么Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis 是一个高性能的key-value数据库。它支持存储的value类型很多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/re
摘要由CSDN通过智能技术生成

Redis简介

Redis是什么

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis 是一个高性能的key-value数据库。它支持存储的value类型很多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。同时为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

​ ——摘自百度百科

Redis概述

Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

  • 基于内存运行,性能高效
  • 支持分布式,理论上可以无限扩展
  • key-value存储系统
  • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

相比于其他数据库类型,Redis具备的特点是:

  • C/S通讯模型
  • 单进程单线程模型
  • 丰富的数据类型
  • 操作具有原子性
  • 持久化
  • 高并发读写
  • 支持lua脚本

Redis下载与安装

下载地址:下载链接

下载完成之后直接解压即可安装成功。

之后依次运行服务器端和客户端即可。

在这里插入图片描述

注意:服务器端可能会出现闪退问题

解决:在redis目录中新建start.bat文件(右键新建文本文档,然后后缀改为bat),右键点击编辑 ,输入 redis-server.exe redis.windows.conf

保存,然后双击运行。

Redis使用

常用命令

set key value 】 存入一个key和值。如:set myname reson

【 get key 】 读取一个key的值。

【 del key 】 删除一个key。

【 del key1 key2 ... keyN 】 删除多个key。如:del myname1 myname2

【 exists key 】 判断一个key是否存在。

【 type key 】 查看key的类型。

【 rename key keyNew 】 重命名key名。如:rename myname myname2

【 dbsize 】 查看当前库中的key的条数。

【 expire key time 】 指定key的过期时间,单位为秒。如:expire myname 9(设置9秒后过期)

【 ttl key 】 查看redis有多长时间过期,单位为秒。

【 keys * 】 列出当前库中所有的key名。

【 keys a* 】 列出当前库中所有以字符串“a"开头的key。

【 select db-index 】 选择一个数据库,如选择第一个数据库:select 0;选择第二个 select 1;默认有16个数据库,这个值可以在redis.conf中配置。

【 flushdb 】 清掉当前库中所有的key(生产环境下需谨慎操作)。

【 flushall 】 清掉所有库中全部的key(生产环境下需谨慎操作)。

Sting与Hash相关命令

string
    set name cxx
    get name
    getrange name 0 -1        字符串分段
    getset name new_cxx       设置值,返回旧值
    mset key1 key2            批量设置
    mget key1 key2            批量获取
    setnx key value           不存在就插入(not exists)
    setex key time value      过期时间(expire)
    setrange key index value  从index开始替换value
    incr age        递增
    incrby age 10   递增
    decr age        递减
    decrby age 10   递减
    incrbyfloat     增减浮点数
    append          追加
    strlen          长度
    getbit/setbit/bitcount/bitop    位操作
    
hash
    hset myhash name cxx
    hget myhash name
    hmset myhash name cxx age 25 note "i am notes"
    hmget myhash name age note   
    hgetall myhash               获取所有的
    hexists myhash name          是否存在
    hsetnx myhash score 100      设置不存在的
    hincrby myhash id 1          递增
    hdel myhash name             删除
    hkeys myhash                 只取key
    hvals myhash                 只取value
    hlen myhash                  长度

SpringBoot2.X集成Redis

  1. 导入依赖
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--redis连接池依赖-->
<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-pool2</artifactId>
   <version>2.6.1</version>
</dependency>
  1. 配置
#redis地址
spring.redis.host=192.168.159.129
#redis客户端lettuce配置
#最大连接数,负数表示无限制
spring.redis.lettuce.pool.max-active=8
#最大等待,负数表示无限制
spring.redis.lettuce.pool.max-wait=-1
#shutdown超时
spring.redis.lettuce.shutdown-timeout=100
#最大空闲连接数,负数表示无限制
spring.redis.lettuce.pool.max-idle=8
#最小空闲连接数
spring.redis.lettuce.pool.min-idle=0
  1. 之后自动注入RedisTemplate进行操作。
@Autowired
private RedisTemplate redisTemplate;

详情操作请看:https://blog.csdn.net/lydms/article/details/105224210

Redis 在 Java Web 中的应用

Redis 在 Java Web 主要有两个应用场景:

  • 存储 缓存 用的数据;
  • 需要高速读/写的场合使用它快速读/写

Redis常见问题解析:击穿

概念:在Redis获取某一key时, 由于key不存在, 而必须向DB发起一次请求的行为, 称为“Redis击穿”。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hicixVaf-1605185587783)(C:\Users\haolayo\Desktop\1.png)]

引发击穿的原因:

  • 第一次访问
  • 恶意访问不存在的key
  • Key过期

合理的规避方案:

  • 服务器启动时, 提前写入
  • 规范key的命名, 通过中间件拦截
  • 对某些高频访问的Key,设置合理的TTL或永不过期

Redis常见问题解析:雪崩

概念:Redis缓存层由于某种原因宕机后,所有的请求会涌向存储层,短时间内的高并发请求可能会导致存储层挂机,称之为“Redis雪崩”。

合理的规避方案:

  • 使用Redis集群
  • 限流
缓存

在日常对数据库的访问中,读操作的次数远超写操作,比例大概在 1:93:7,所以需要读的可能性是比写的可能大得多的。当我们使用SQL语句去数据库进行读写操作时,数据库就会去磁盘把对应的数据索引取回来,这是一个相对较慢的过程。

如果我们把数据放在 Redis 中,也就是直接放在内存之中,让服务端直接去读取内存中的数据,那么这样速度明显就会快上不少,并且会极大减小数据库的压力,但是使用内存进行数据存储开销也是比较大的,限于成本的原因,一般我们只是使用 Redis 存储一些常用和主要的数据,比如用户登录的信息等。

持久化

什么是Redis持久化?Redis有哪几种持久化方式?优缺点是什么?

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。

Redis 提供了两种持久化方式:RDB(默认) 和AOF

RDB:

rdb是Redis DataBase缩写

功能核心函数rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数

img

AOF:

Aof是Append-only file缩写

img

每当执行服务器(定时)任务或者函数时flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作

aof写入保存:

WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件

SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。

存储结构:

内容是redis通讯协议(RESP )格式的命令文本存储。

比较

1、aof文件比rdb更新频率高,优先使用aof还原数据。

2、aof比rdb更安全也更大

3、rdb性能比aof好

4、如果两个都配了优先加载AOF

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值