Redis 学习笔记

在这里插入图片描述

NoSQL

什么是NoSQL

NoSQL = not only sql

泛指非关系型数据库

关系型数据库:表格,行、列记录

为什么用NoSQL

用户的个人信息、地理位置、用户数据等爆发式增长,这些数据类型的存储不需要一个固定的格式,不需要多余的操作就可以横向扩展,就需要用NoSQL数据库。

特点

1、方便扩展,数据之间无关系

2、大数据量高性能

3、数据类型多样型,不需事先设计数据库

4、没有固定的查询语言

5、一致性

四大分类

KV键值对

Redis

文档型数据库

BSON格式,和JSON一样

MongoDB,一个基于分布式文件存储的数据库,主要用于处理大量的文档,是一个介于关系型数据库和非关系型数据库中间的产品,是非关系型数据库中功能最丰富、最像关系型数据库的产品

列存储

HBase

分布式文件系统

图形关系数据库

不是存图形,放的是关系,比如社交网络、广告推荐

Neo4j,InfoGrid

Redis

官网:https://redis.io/

文档:https://redis.io/docs/about/

安装

安装教程:https://www.runoob.com/redis/redis-install.html

Windows

下载地址:https://github.com/tporadowski/redis/releases

Linux

wget http://download.redis.io/releases/redis-7.2.4.tar.gz
或
#下载文件重命名为redis-7.2.4.tar.gz
wget https://github.com/redis/redis/archive/7.2.4.tar.gz

tar -zxvf redis-7.2.4.tar.gz
cd redis-7.2.4

#安装依赖环境
# yum install gcc-c++

#安装服务
#redis默认安装目录/usr/local/bin
make
# make install

#redis默认不是后台启动,需修改配置
vi redis.conf
	daemonize yes

用处

1、内存存储、持久化。内存中是断电即失的,所以持久化很必要(机制:rdb、aof)

2、效率高,可以用于高速缓存

3、发布订阅系统

4、地图信息分析

5、计时器、计数器(浏览量)

特性

1、多样的数据类型

2、持久化

3、集群

4、事务

命令/Redis Key

https://redis.io/commands/

#测试连接
ping

#存
set key value

#取
get key

#查看数据库所有key
keys *

#清空当前数据库
flushdb

#清空全部数据库
flushall

#判断key是否存在,返回1存在0不存在
exists key

#删除key
del key

#移动key到指定数据库,1表示目标数据库,返回1表示移动成功
move key 1

#设置过期时间,10s后过期
expire key 10

#展示key剩余过期时间,返回-2表示已过期
ttl key

#查看key是什么类型
type key

性能测试

redis-benchmark

redis-benchmark [option] [option value]
选项 描述 默认值
-h 指定服务器主机名 127.0.0.1
-p 指定服务器端口 6379
-s 指定服务器 socket
-c 指定并发连接数 50
-n 指定请求数 10000
-d 以字节的形式指定 SET/GET 值的数据大小 2
-k 1=keep alive 0=reconnect 1
-r SET/GET/INCR 使用随机 key, SADD 使用随机值
-P 通过管道传输 请求 1
-q 强制退出 redis。仅显示 query/sec 值
–csv 以 CSV 格式输出
-l(小写字母L) 生成循环,永久执行测试
-t 仅运行以逗号分隔的测试命令列表。
-I(大写字母i) Idle 模式。仅打开 N 个 idle 连接并等待。
redis-benchmark -h localhost -p 6379 -c 100 -n 100000

====== SET ======
  100000 requests completed in 1.46 seconds			#对10w个写入请求进行测试
  100 parallel clients								#100个并发客户端
  3 bytes payload									#每次写入3个字节
  keep alive: 1										#只有1台服务器处理请求,单机性能

89.61% <= 1 milliseconds
99.58% <= 2 milliseconds
99.70% <= 8 milliseconds
99.73% <= 9 milliseconds
99.77% <= 10 milliseconds
99.81% <= 11 milliseconds
99.86% <= 12 milliseconds
99.90% <= 13 milliseconds
99.90% <= 18 milliseconds
99.92% <= 19 milliseconds
99.95% <= 20 milliseconds
100.00% <= 21 milliseconds
100.00% <= 21 milliseconds							#所有请求在21ms处理完成
68540.09 requests per second						#每秒处理68540.09个请求

基础知识

Redis默认有16个数据库

redis.conf

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT <dbid> where
# dbid is a number between 0 and 'databases'-1
databases 16

默认使用第0个数据库,可以使用select进行切换

127.0.0.1:6379> select 3		#切换数据库
OK
127.0.0.1:6379[3]> dbsize		#查看数据库大小
(integer) 0

Redis是单线程的

Redis是基于内存操作,CPU不是Redis的性能瓶颈。Redis的瓶颈是根据机器的内存和网络带宽

Redis 不同版本之间采用的线程模型是不一样的,Redis4.0 版本之前使用的是单线程模型,4.0 版本之后增加了多线程的支持。

在4.0之前虽然Redis是单线程,也只是说它的网络 I/O 线程以及 Set 和 Get 操作是由一个线程完成的。持久化、集群同步还是使用其他线程来完成。

4.0 之后添加了多线程的支持,主要是体现在大数据的异步删除功能上,例如 unlink key、flushdb async、flushall async 等

核心:Redis将所有的数据全部放在内存中,所以说单线程去操作效率是最高的。多线程会产生CPU上下文切换,耗时。对于内存系统来说,没有上下文切换的效率是最高的。多次读写都是在一个CPU上

五大数据类型

String/字符串

使用场景:value可以是字符串、数字

  • 计数器
  • 统计多单位的数量
  • 粉丝数
  • 对象缓存存储

命令

https://redis.io/commands/?group=string

#追加字符串,返回字符串长度,key不存在则set
append key value

#获取字符串长度
strlen key

#截取字符串,[start,end]
getrange key start end

#替换指定位置开始的字符串
setrange key offset value

#########################

#i++
incr key

#i--
decr key

#i+10
incrby view 10

#i-5
decrby view 5

#########################
#设置过期时间,set with expire
setex key seconds value

#不存在再设置,set if not exist,常用在分布式锁中
setnx key value

#########################

#批量设置
mset key value

#批量获取
mget key

#批量,原子性操作,同时成功或失败
msetnx key value

#########################

#先get再set
getset key value

List/列表

基本的数据类型:列表

可以用作栈、队列、阻塞队列

实际上是一个链表 before node after,left、right都可以插入值

  • key不存在,则新建链表
  • key存在,则新增
  • 移除所有值,链表为空,则不存在
  • 在两边插入或修改,效率最高;中间元素,效率相对低

消息队列:lpush,rpop

栈:lpush,lpop

命令

https://redis.io/commands/?group=list

#存,插入到列表头部
lpush key value [value ...]
#存,插入到列表尾部
rpush key value [value ...]

#取
lrange key start stop

#移除列表第一个元素
lpop key
#移除列表最后一个元素
rpop key

#########################

#通过下标获取list中某一个值
lindex key index

#获取列表长度
llen key

#########################
### Redis 学习笔记概述 Redis 是一种高性能的键值存储系统,支持多种数据结构并提供丰富的功能。为了全面掌握 Redis 的使用方法和技术细节,一份详尽的学习笔记应当覆盖以下几个方面: #### 一、基础概念介绍 - **定义与特性** - Redis 是一个开源的内存数据结构存储库,可以用作数据库、缓存和消息中间件[^1]。 - **应用场景** - 高效的数据读写操作使其适用于高速缓存场景;持久化的选项也允许作为可靠的主数据库。 #### 二、环境搭建指南 - **安装过程** - 安装完成后可以通过 `redis-server` 命令启动服务,默认情况下这会在前台运行并且占用当前终端会话[^2]。 - **后台模式配置** - 推荐通过编辑 `/usr/local/src/redis-6.2.6/redis.conf` 文件中的设置项使 Redis 在后台稳定工作。 #### 三、核心功能解析 - **基本命令集** - 包括字符串(Strings)、哈希(Hashes)、列表(Lists)等常见数据类型的增删改查指令。 - **高级特性应用** - 发布订阅(Pub/Sub),事务处理(Transaction),Lua脚本执行等功能的应用实例。 #### 四、集成开发实践 - **Spring Boot 整合案例** - 使用 Spring Data Redis 提供的 `RedisTemplate` 对象简化 Java 应用程序同 Redis 数据源之间的交互逻辑[^3]。 #### 五、优化策略探讨 - **性能调优技巧** - 考虑到 CPU 并非主要瓶颈因素而是受制于物理 RAM 和网卡吞吐能力的影响,合理规划硬件资源分配对于提升整体效率至关重要。 - **预加载机制说明** - 当应用程序首次上线前预先填充部分热点数据至 Redis 中可以有效缓解高峰期的压力,提高响应速度[^4]。 #### 六、可靠性保障措施 - **持久化方案对比** - RDB 快照方式能够在指定时间间隔内保存数据副本,确保意外断电等情况下的恢复可能性。 ```bash # 启动Redis服务器(建议采用守护进程方式) $ redis-server /path/to/redis.conf --daemonize yes ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值