前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Redis快速入门①---基础篇

Redis快速入门①---基础篇

作者头像
用户11288958
发布2025-01-17 14:09:29
发布2025-01-17 14:09:29
10000
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

如有侵权立马删除!!!!!!!!!!

一、Redis入门课程介绍

d53faf57a96d4d99a2d57891bdc12a11.png
d53faf57a96d4d99a2d57891bdc12a11.png

不仅有json这样字符串还有,List集合、哈希表....

NoSQL数据库

5ee4699f226d4ab2928eecaa5f17f461.png
5ee4699f226d4ab2928eecaa5f17f461.png

二、初识Redis-认识NoSQL

1582073862cb49d0bd9e89d3a3494dc1.png
1582073862cb49d0bd9e89d3a3494dc1.png
4fa29f28fabb4bdf855400417c342180.png
4fa29f28fabb4bdf855400417c342180.png

1.SQL 与 NoSQL 的区别

02975c05d0e74682a8c7d30c69847b1a.png
02975c05d0e74682a8c7d30c69847b1a.png

1.结构化(约束) / 非结构化

166e04bfcdfe4c8084d76bb2e2d0a143.png
166e04bfcdfe4c8084d76bb2e2d0a143.png

2. 关联的 (外键) / 非关联的(嵌套,重复)

b5c0bda480bb46de8f6bb45c5a9a7309.png
b5c0bda480bb46de8f6bb45c5a9a7309.png
0a360d0481334dea96c2e756d923f46c.png
0a360d0481334dea96c2e756d923f46c.png

3. SQL 查询 / 非SQL (每一个库要学不同的语法)

fb271a751ada4ed59ade9b313f0966b9.png
fb271a751ada4ed59ade9b313f0966b9.png

4.事务方面: ACID(原子性、一致性、隔离性,持久性) / BASE (无事务,基本满足)

7de8cb46d86149b381abea36b2228d60.png
7de8cb46d86149b381abea36b2228d60.png

如果对数据安全性要求较高,要满足ACID。此时应该选择SQL型数据库,而不是NoSQL。

三、 初识Redis-认识Redis

003a53b74e604b77afbcf01db3a6398f.png
003a53b74e604b77afbcf01db3a6398f.png

四、 初识Redis-安装Redis

单机安装Redis

安装Redis依赖

Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:

代码语言:javascript
代码运行次数:0
运行
复制
yum install -y gcc tcl

上传安装包并解压编译并安装

然后将Redis安装包上传 我放到了/usr/local/src 目录: 这个目录一般情况下都是放我们的安装文件。

133942c068a54b8e8079d0df9b17e36c.png
133942c068a54b8e8079d0df9b17e36c.png
代码语言:javascript
代码运行次数:0
运行
复制
tar -xzf redis-6.2.6.tar.gz

解压后:进入redis目录

代码语言:javascript
代码运行次数:0
运行
复制
cd redis-6.2.6

运行编译 并 安装 命令

代码语言:javascript
代码运行次数:0
运行
复制
make && make install

如果没有出错,应该就安装成功了。

93f7430734dc4b5ba2c5280718b79128.png
93f7430734dc4b5ba2c5280718b79128.png

检查是否安装成功(安装目录)

默认的安装路径是在 `/usr/local/bin`目录下:

代码语言:javascript
代码运行次数:0
运行
复制
cd /usr/local/bin

该目录以及默认配置到环境变量,因此可以在任意目录下运行这些命令。其中: - redis-cli:是redis提供的命令行客户端 - redis-server:是redis的服务端启动脚本 - redis-sentinel:是redis的哨兵启动脚本

启动

redis的启动方式有很多种,例如: - 默认启动 - 指定配置启动 - 开机自启

1.默认启动

安装完成后,在任意目录输入redis-server命令即可启动Redis:

这种启动属于`前台启动`,会阻塞整个会话窗口,窗口关闭或者按下`CTRL + C`则Redis停止。不推荐使用。

代码语言:javascript
代码运行次数:0
运行
复制
redis-server
071fc470828c48088d8ecdd563d56de4.png
071fc470828c48088d8ecdd563d56de4.png

redis启动成功。

2.指定配置启动(通过配置文件启动)

如果要让Redis以`后台`方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(`/usr/local/src/redis-6.2.6`),名字叫redis.conf:

我们先将这个配置文件备份一份:

进入目录

代码语言:javascript
代码运行次数:0
运行
复制
cd /usr/local/src/redis-6.2.6

备份

代码语言:javascript
代码运行次数:0
运行
复制
cp redis.conf redis.conf.bck
修改redis.conf文件中的一些配置:(/name快速搜索文档内容)
代码语言:javascript
代码运行次数:0
运行
复制
vi redis.conf

①允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0

bind 0.0.0.0

d6a091379b1c4022862758816806c042.png
d6a091379b1c4022862758816806c042.png

②守护进程,修改为yes后即可后台运行

daemonize yes

22adc90ff3bb434ba28faa9fd94dcead.png
22adc90ff3bb434ba28faa9fd94dcead.png

③密码,设置后访问Redis必须输入密码

requirepass qyy2001

e7e4616b422844c381f024948074c48a.png
e7e4616b422844c381f024948074c48a.png
Redis的其它常见配置:

监听的端口

port 6379

工作目录,默认是当前目录,也就是运行redis-server时的命令,日志、持久化等文件会保存在这个目录

dir .

数据库数量,设置为1,代表只使用1个库,默认有16个库,编号0~15

databases 1

设置redis能够使用的最大内存

maxmemory 512mb

日志文件,默认为空,不记录日志,可以指定日志文件名

logfile "redis.log"

后台启动)启动Redis:

进入redis安装目录

cd /usr/local/src/redis-6.2.6

启动

redis-server redis.conf

查看启动的进程

ps -ef | grep redis

停止服务

可以直接杀死进程

ps -ef | grep redis

0bb46ca2fbaa423080e07d816f1542a8.png
0bb46ca2fbaa423080e07d816f1542a8.png

kill -9 402368

3.开机自启(推荐)

我们也可以通过配置来实现开机自启。

首先,新建一个系统服务文件:

vi /etc/systemd/system/redis.service

内容如下:

[Unit] Description=redis-server After=network.target [Service] Type=forking ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf PrivateTmp=true [Install] WantedBy=multi-user.target

然后重载系统服务:

systemctl daemon-reload

77a9727a050f42c7acebd5c0017e9763.png
77a9727a050f42c7acebd5c0017e9763.png

现在,我们可以用下面这组命令来操作redis了:

启动

systemctl start redis

停止

systemctl stop redis

重启

systemctl restart redis

查看状态

systemctl status redis

执行下面的命令,可以让redis开机自启:

systemctl enable redis

2ba2e99e352e43a994b116b26ac85e19.png
2ba2e99e352e43a994b116b26ac85e19.png

五、redis命令行客户端

Redis安装完成后就自带了命令行客户端:redis-cli,使用方式如下:

redis-cli [options] [commonds]

常见的options有:

-h 127.0.0.1:指定要连接的redis节点的IP地址,默认是127.0.0.1 这也可以省略不写,那么就是默认值。 外部连接 通过服务器的主机地址进行连接,这就和之前的配置文件有关系了,并且还和服务器的安全组、防火墙有关系。一定要开放6379这个端口号。否则连接不成功。 我的主机地址:113.44.83.92 -p 6379:指定要连接的redis节点的端口,默认是6379.这也可以省略不写,那么就是默认值。 -a qyy2001:指定redis的访问密码(不过我们一般不在这里指定。)

commonds就是Redis的操作命令,

例如:

ping:与redis服务端做心跳测试,服务端正常会返回pong

74b6bbf66ac44e20bfe0500e23872c2b.png
74b6bbf66ac44e20bfe0500e23872c2b.png

不指定commond时,会

进入 redis-cli 的交互控制台:

053d91bd89e94a5294024cdfe510df35.png
053d91bd89e94a5294024cdfe510df35.png

基本操作(重点)

1.先连接上redis。进入 redis-cli 的交互控制台:(默认是通过本机地址进行连接)

redis-cli

1b3cd83613714e5d8c79ac93d64044c0.png
1b3cd83613714e5d8c79ac93d64044c0.png

也可以指定服务器地址连接

redis-cli -h 113.44.83.92

a8b075207fdb4873a8b52b4c018228d6.png
a8b075207fdb4873a8b52b4c018228d6.png

2.通过auth命令指定用户名和密码,用户名可选。此时没有用户名

auth qyy2001

aa748a2a6b924dbf8a9a2e2bcbd1352f.png
aa748a2a6b924dbf8a9a2e2bcbd1352f.png

3.ping 输出 pong代表连接成功

ping

a1b80a2dda7749a5b41ad70cf33d2ebc.png
a1b80a2dda7749a5b41ad70cf33d2ebc.png

4. 增:

set name java 向redis里面存了一个键值对了。key是name,value是java

dba3ae038b854df0ad13e2ba4192741a.png
dba3ae038b854df0ad13e2ba4192741a.png

5.取:

get name

0ac38f554c764e3ba369efbc063a2579.png
0ac38f554c764e3ba369efbc063a2579.png
42fc948fa59e406e9f87838a4f6e9b29.png
42fc948fa59e406e9f87838a4f6e9b29.png

六、redis的图形化界面客户端

这是大神编写的。

操作示例

2f6d1822509b4f31b5a2be246fdac804.png
2f6d1822509b4f31b5a2be246fdac804.png

连接成功

67fedac7d0544f2ea0943e5b2e5de8e4.png
67fedac7d0544f2ea0943e5b2e5de8e4.png

如上图显示了 redis 默认的 16 个数据库

点击别的库,新建数据。就可以添加新的键值对。 然后保存。

8985031367ed4db7bfc101a0d335d8cc.png
8985031367ed4db7bfc101a0d335d8cc.png

在服务器上面查找到这个数据

选库操作(命令)

select 1

get name

e87f8227c30c4278945e8f1888c7e9b1.png
e87f8227c30c4278945e8f1888c7e9b1.png

如果连接不成功

可以进行如下修改的测试。注意之前的配置文件也要修改

关闭防火墙命令

systemctl stop firewalld

开启防火墙命令

sudo systemctl start firewalld

添加防火墙规则允许 6379 端口

第一步:添加防火墙规则允许 6379 端口(TCP 协议)通过

sudo firewall-cmd --permanent --add-port=6379/tcp

第二步:

重新加载防火墙配置

,使新添加的规则生效

sudo firewall-cmd --reload

修改redis.conf配置文件禁用 protected-mode

protected-mode no

958b8a3b12b448f89d569343ab27f61e.png
958b8a3b12b448f89d569343ab27f61e.png

保存配置文件后,重启 Redis 服务:

sudo systemctl restart redis

从外部机器测试连接

telnet安装命令

yum install telnet - y

使用 telnet进行测试

telnet 113.44.83.92 6379

也可以在服务器上面根据服务器地址进行连接尝试

连接失败原因

安全组配置错误。 我有多个实例的安全组。但是关联实例的安全组只有一个。 而恰好这个安全组没有开放 6379 的端口号。随后我添加了之后就好了。

dbfd976c8b2f47ba9effc0d27bd90eed.png
dbfd976c8b2f47ba9effc0d27bd90eed.png

七、redis命令-数据结构介绍

数据结构介绍

46ccd1822a934f6780603ec857a5de63.png
46ccd1822a934f6780603ec857a5de63.png

还有别的类型,如消息队列。后面会说到

官方文档查看命令

命令忘了没关系,主要是要会查

官方文档

9a402423e53840eba460c94cac323295.png
9a402423e53840eba460c94cac323295.png
3e35f8aca2f14432be2a9aaddba8d9d8.png
3e35f8aca2f14432be2a9aaddba8d9d8.png

命令行查看官方文档

fa06d1697d354971821885996aa2278e.png
fa06d1697d354971821885996aa2278e.png
a55978b5ba9b49a5941a0aad2bec3ca5.png
a55978b5ba9b49a5941a0aad2bec3ca5.png

比如看String

96c1a575e21e4696a38a5c00c2f80d1c.png
96c1a575e21e4696a38a5c00c2f80d1c.png

八、redis命令-通用命令(@genertic)

官方文档放在Keys这个目录里面

bccb39294293408c933c6e0f592b9c97.png
bccb39294293408c933c6e0f592b9c97.png
7f9199e6a7c2421e982a08fc96c9c539.png
7f9199e6a7c2421e982a08fc96c9c539.png
32ae0b76a76c44709bfb98b5b288b876.png
32ae0b76a76c44709bfb98b5b288b876.png

模糊匹配查询效率不高。

九、redis命令-String类型

4e3e2524324a4d0bbdc248d794a9c23e.png
4e3e2524324a4d0bbdc248d794a9c23e.png

小结:

21dce906c04d4b159f85909388b9ccd1.png
21dce906c04d4b159f85909388b9ccd1.png

十、redis命令-Key的层级格式

思考:如何区分不同类型的key

fc5e2484a5b24cf5b98de5ccb1c94293.png
fc5e2484a5b24cf5b98de5ccb1c94293.png

Key的结构

c406058adb9d452994c7e62380320954.png
c406058adb9d452994c7e62380320954.png

示例:

764b5956583e4bd69a31084c7a028c5b.png
764b5956583e4bd69a31084c7a028c5b.png
d083fa4faaa84e22bd8a8f4c4b5ed50c.png
d083fa4faaa84e22bd8a8f4c4b5ed50c.png

以冒号隔开,形成层级结构

7633422b40c44693af91567a80bd2f71.png
7633422b40c44693af91567a80bd2f71.png

总结:

3241a7b85f1b4a779728761815de8b0c.png
3241a7b85f1b4a779728761815de8b0c.png

十一、redis命令-Hash类型

当成java中的Map操作。

f161ac6c8f3748b5bd8b4d6bf0edad9a.png
f161ac6c8f3748b5bd8b4d6bf0edad9a.png
86094a830d5649e1b35e32aeed8e01a1.png
86094a830d5649e1b35e32aeed8e01a1.png

示例:

HSET

acf00163dd23479588fceb330a0e7b8f.png
acf00163dd23479588fceb330a0e7b8f.png
ea873c2196e0440ea62b023d767f2de6.png
ea873c2196e0440ea62b023d767f2de6.png

HGET

8990a0f111e041199c7ad4ff4fbb8445.png
8990a0f111e041199c7ad4ff4fbb8445.png

HMSET

9d49aac073764ae6bac180ca3684fac6.png
9d49aac073764ae6bac180ca3684fac6.png
90bc3b5a075544ca88763d8320bcd7bf.png
90bc3b5a075544ca88763d8320bcd7bf.png

HGETALL

570f60a1e0ed43b4917efd01ea93bc49.png
570f60a1e0ed43b4917efd01ea93bc49.png

HKEYS

374b3b48febb483ba007a610c53ea571.png
374b3b48febb483ba007a610c53ea571.png

HVALS

4976e01d8696432d84f55ba40f8a1cf2.png
4976e01d8696432d84f55ba40f8a1cf2.png

HINCRBY

8ceb0dab59c6463d9282b321dcadc254.png
8ceb0dab59c6463d9282b321dcadc254.png

HSETNX

77669ac1e99f47729cc1b8702713cb67.png
77669ac1e99f47729cc1b8702713cb67.png

小结:

00ae200db1964094927281dc08e5cc26.png
00ae200db1964094927281dc08e5cc26.png

十二、redis命令-List类型

00a278a84c5a46129eed9af09b1eee87.png
00a278a84c5a46129eed9af09b1eee87.png
374ab357f8c44cd2bc3a8455f7d84b33.png
374ab357f8c44cd2bc3a8455f7d84b33.png
1c74e794483943f58ea6d98bfd22cc7f.png
1c74e794483943f58ea6d98bfd22cc7f.png

lpush

e104b3b2de54451aa3c550567dded913.png
e104b3b2de54451aa3c550567dded913.png
8cb01a91888440d0b24bde0d5357ded7.png
8cb01a91888440d0b24bde0d5357ded7.png
357c7b7eab8b443a855d42c26b8bfdbd.png
357c7b7eab8b443a855d42c26b8bfdbd.png

lpop

rpop

2e0e4ec0053a4684bad6e04f903f1060.png
2e0e4ec0053a4684bad6e04f903f1060.png
e8c8e147f63647e895889b279b1bad63.png
e8c8e147f63647e895889b279b1bad63.png

lrange

10e699d55430498aa267324ed3fb3a30.png
10e699d55430498aa267324ed3fb3a30.png
160b298a42ec4473b7d2efebc01479d0.png
160b298a42ec4473b7d2efebc01479d0.png

blpop

e7c1211db4bb4da3874003516bf48c2b.png
e7c1211db4bb4da3874003516bf48c2b.png

阻塞式获取。 等100秒、如果拿不到就报错

1d68af9fcd1e41bfb93a57e83924d456.png
1d68af9fcd1e41bfb93a57e83924d456.png

在另一半插入数据。最终拿到数据。返回了数据和阻塞时间

brpop

类似rpop

思考三连:如何用list结构模拟栈、队列、阻塞队列

dcb7b2713a71429487fd42b6036ee05d.png
dcb7b2713a71429487fd42b6036ee05d.png

十三、redis命令-Set类型

c0ecbdb7778f4cde9199db96a76a826c.png
c0ecbdb7778f4cde9199db96a76a826c.png
0e5e869bc0f246e486229cd6945becfe.png
0e5e869bc0f246e486229cd6945becfe.png

对单个集合操作

sadd

9d4943251c03433691ffc04c55d31d8f.png
9d4943251c03433691ffc04c55d31d8f.png

smembers

57060170ef9c454492ea073d16c6ec9e.png
57060170ef9c454492ea073d16c6ec9e.png

srem

c75647f87d50482483269a38707bef07.png
c75647f87d50482483269a38707bef07.png

sismember

decc9748005646a58e27fa1d96fc1193.png
decc9748005646a58e27fa1d96fc1193.png

scard

0107dfd226b249589063e1c59445728f.png
0107dfd226b249589063e1c59445728f.png

sinter交集

sdiff差集

sunion并集

bf45357c20bb4826847cf5f4b483f89a.png
bf45357c20bb4826847cf5f4b483f89a.png

案例练习

743c22c4c81e4b688f6dab382cdcc908.png
743c22c4c81e4b688f6dab382cdcc908.png

将下列数据用Redis的Set集合来存储:

•张三的好友有:李四、王五、赵六

44c8cf2c2167474db2467104e841b7c6.png
44c8cf2c2167474db2467104e841b7c6.png

•李四的好友有:王五、麻子、二狗

57403cfaf77640aab93e6c98ae195c63.png
57403cfaf77640aab93e6c98ae195c63.png

利用Set的命令实现下列功能:

•计算张三的好友有几人

bd90722fa37e4f549d003b0f91f27dee.png
bd90722fa37e4f549d003b0f91f27dee.png

•计算张三和李四有哪些共同好友

ee248b3551d34893b3315ffb307c86dc.png
ee248b3551d34893b3315ffb307c86dc.png

•查询哪些人是张三的好友却不是李四的好友

ea4da09e507e4ad799e4e2fa2811bee3.png
ea4da09e507e4ad799e4e2fa2811bee3.png

•查询张三和李四的好友总共有哪些人

51afc9c58fcf45c78a26304a3c04050c.png
51afc9c58fcf45c78a26304a3c04050c.png

•判断李四是否是张三的好友

adfaf7d5d8134352bc7153ff79b25553.png
adfaf7d5d8134352bc7153ff79b25553.png

•判断张三是否是李四的好友

41b82f6a478044f5b1f5a8badde768d7.png
41b82f6a478044f5b1f5a8badde768d7.png

•将李四从张三的好友列表中移除

e004a454e8514d09a7a0a1f6d95c5c24.png
e004a454e8514d09a7a0a1f6d95c5c24.png

十四、redis命令-SortedSet类型

7382063054c542a8ac3bca137113629d.png
7382063054c542a8ac3bca137113629d.png
248536c5854a4659bc93b4ae7ea5dad2.png
248536c5854a4659bc93b4ae7ea5dad2.png
69db408639ae4d44942fbdc3ff166c57.png
69db408639ae4d44942fbdc3ff166c57.png

案例:SortedSet命令练习

将班级的下列学生得分存入Redis的SortedSet中:

Jack 85, Lucy 89, Rose 82, Tom 95, Jerry 78, Amy 92, Miles 76

12e46415be0540abbdb9977ceb89080f.png
12e46415be0540abbdb9977ceb89080f.png

•并实现下列功能:

•删除Tom同学

42629e278d4a478387f1a45cbfc4fc2c.png
42629e278d4a478387f1a45cbfc4fc2c.png

•获取Amy同学的分数

zscore stus amy

•获取Rose同学的排名

5d9c295075994f508cc5186dbfe0a039.png
5d9c295075994f508cc5186dbfe0a039.png

•查询80分以下有几个学生

267960100abf479db7de6d2638cd9243.png
267960100abf479db7de6d2638cd9243.png

•给Amy同学加2分

3e672a23c8e24a0784050e1d7094f107.png
3e672a23c8e24a0784050e1d7094f107.png

•查出成绩前3名的同学

14969725bd8041278bed60c17b90dab9.png
14969725bd8041278bed60c17b90dab9.png

•查出成绩80分以下的所有同学

280122ce114a4474b26a934516a0cc36.png
280122ce114a4474b26a934516a0cc36.png

十五、Redis的客户端-客户端对比

6c3b91bcb76c4c4f9b236b59c932ec38.png
6c3b91bcb76c4c4f9b236b59c932ec38.png
0d8b81dc829c45ce923ff9fcfcbff0c9.png
0d8b81dc829c45ce923ff9fcfcbff0c9.png
7c0878845f8d4ae5b88cbaab14384ac0.png
7c0878845f8d4ae5b88cbaab14384ac0.png

十六、Jedis快速入门

Jedis的官网地址: https://github.com/redis/jedis,我们先来个快速入门:

87a7e93479d14857ae47be86f45c78c1.png
87a7e93479d14857ae47be86f45c78c1.png

1.引入依赖:(官网地址可以找到)

jedis依赖

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.2.0</version>
</dependency>

单元测试

代码语言:javascript
代码运行次数:0
运行
复制
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter</artifactId>
    <version>5.7.0</version>
    <scope>test</scope>
</dependency>

2.建立连接

private Jedis jedis; @BeforeEach void setUp() { // 建立连接 jedis = new Jedis("192.168.150.101", 6379); // 设置密码 jedis.auth("123321"); // 选择库 jedis.select(0); }

3.测试String

@Test void testString() { // 插入数据,方法名称就是redis命令名称,非常简单 String result = jedis.set("name", "张三"); System.out.println("result = " + result); // 获取数据 String name = jedis.get("name"); System.out.println("name = " + name); }

4.释放资源

@AfterEach void tearDown() { // 释放资源 if (jedis != null) { jedis.close(); } }

4a57481d648a4e05ae4be482f07030a3.png
4a57481d648a4e05ae4be482f07030a3.png
d6057471627847a9b62afba87e6c7fb5.png
d6057471627847a9b62afba87e6c7fb5.png

小结

d66c0de10e184821b7653772a02fdf7c.png
d66c0de10e184821b7653772a02fdf7c.png

十七、Jedis的连接池

ec8fca227f544d0689d1f37999544992.png
ec8fca227f544d0689d1f37999544992.png

实现连接池的使用

public class JedisConnectionFactory { private static final JedisPool jedisPool; static { JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); // 最大连接 jedisPoolConfig.setMaxTotal(8); // 最大空闲连接 jedisPoolConfig.setMaxIdle(8); // 最小空闲连接 jedisPoolConfig.setMinIdle(0); // 设置最长等待时间, ms jedisPoolConfig.setMaxWaitMillis(200); jedisPool = new JedisPool(jedisPoolConfig, "192.168.150.101", 6379, 1000, "123321"); } // 获取Jedis对象 public static Jedis getJedis(){ return jedisPool.getResource(); } }

从池子里获取连接

14c15846bce64362bb8446c7679ad3a1.png
14c15846bce64362bb8446c7679ad3a1.png

释放资源则会归还到连接池

962477bfcea843ab943b90ef52dabe55.png
962477bfcea843ab943b90ef52dabe55.png

十八、认识SpringDataRedis

4e30d1703e1746088c986a369621e51f.png
4e30d1703e1746088c986a369621e51f.png

SpringDataRedis快速入门

f7de7b329dc64a7b90c036ad2a6ab04f.png
f7de7b329dc64a7b90c036ad2a6ab04f.png

1.引入依赖(Redis依赖,连接池依赖

SpringBoot已经提供了对SpringDataRedis的支持,使用非常简单:

<!--Redis依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--连接池依赖--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>

2.配置文件

spring: redis: host: 192.168.150.101 port: 6379 password: 123321 lettuce: pool: max-active: 8 # 最大连接 max-idle: 8 # 最大空闲连接 min-idle: 0 # 最小空闲连接 max-wait: 100 # 连接等待时间

现在的配置文件需要在redis后面加上data才行

3.注入RedisTemplate

@Autowired private RedisTemplate redisTemplate;

4.编写测试

@SpringBootTest public class RedisTest { @Autowired private RedisTemplate redisTemplate; @Test void testString() { // 插入一条string类型数据 redisTemplate.opsForValue().set("name", "李四"); // 读取一条string类型数据 Object name = redisTemplate.opsForValue().get("name"); System.out.println("name = " + name); } }

示例:

dd2aa25fa5a64da096ad17309c12913e.png
dd2aa25fa5a64da096ad17309c12913e.png

在数据库中get。我们会发现找不到虎哥,因为它被"剁碎了” 这就和序列化相关了。会将字符串转成字节。 下一节会讲到

fd2c488c59024d89aacb8ceb1b9c90d9.png
fd2c488c59024d89aacb8ceb1b9c90d9.png

小结

12f171ae13424f149f43ed9c21ca6e53.png
12f171ae13424f149f43ed9c21ca6e53.png

二十、SpringDataRedis的序列化方式 (自动序列化)

RedisTemplate可以接收任意Object作为值写入Redis,只不过写入前会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果是这样的:

252dd19bafcb4660b77d3a87cc83e36a.png
252dd19bafcb4660b77d3a87cc83e36a.png

缺点: 1.可读性差 2.内存占用较大

我们可以

自定义RedisTemplate的序列化方式

,代码如下:

@Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { // 创建Template RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); // 设置连接工厂 redisTemplate.setConnectionFactory(redisConnectionFactory); // 设置序列化工具 GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); // key和 hashKey采用 string序列化 redisTemplate.setKeySerializer(RedisSerializer.string()); redisTemplate.setHashKeySerializer(RedisSerializer.string()); // value和 hashValue采用 JSON序列化 redisTemplate.setValueSerializer(jsonRedisSerializer); redisTemplate.setHashValueSerializer(jsonRedisSerializer); return redisTemplate; }

05af6f4d06fb46a6b26ecc538ccfb948.png
05af6f4d06fb46a6b26ecc538ccfb948.png

传入字符串

此时RedisTemplate就符合我们的预期了。 再回到单元测试。 给RedisTemplate加个泛型。 此时就可以往里面存取数据了。这次就能把虎哥正确写入。替代、Rose了 对了因为我们没有引入SpringMVC。因此还要手动引入一个Jackson依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>

b90c084c6fc249f9b18dfe1aabf89efc.png
b90c084c6fc249f9b18dfe1aabf89efc.png

此时虎哥写入进去了

b90567d6c5a042e2ba95e5519cba8054.png
b90567d6c5a042e2ba95e5519cba8054.png
6c6b956edcdd47f192d93fc66feaa41f.png
6c6b956edcdd47f192d93fc66feaa41f.png

传入对象

74b171a8930c4030b130547f4b60f730.png
74b171a8930c4030b130547f4b60f730.png
bbb8b6585a414ab49e7764f3877338c4.png
bbb8b6585a414ab49e7764f3877338c4.png

二十一、StringRedisTemplate(序列化默认String方式)

尽管JSON的序列化方式可以满足我们的需求,但依然存在一些问题,如图:

6c5a2a4ef56c4e4eb7053980615167c8.png
6c5a2a4ef56c4e4eb7053980615167c8.png

为了在反序列化时知道对象的类型,JSON序列化器会将类的class类型写入json结果中,存入Redis,会带来额外的内存开销。

手动序列化 (多了手动处理的过程)

e908a511a9f34395b0416980a089bbab.png
e908a511a9f34395b0416980a089bbab.png

StringRedisTemplate

Spring默认提供了一个StringRedisTemplate类,它的key和value的序列化方式默认就是String方式。省去了我们自定义RedisTemplate的过程:

此时就可以这样写了。

存储对象

d434e16d6a13465f84d080888e481a57.png
d434e16d6a13465f84d080888e481a57.png

@Autowired private StringRedisTemplate stringRedisTemplate; // JSON工具 private static final ObjectMapper mapper = new ObjectMapper(); @Test void testStringTemplate() throws JsonProcessingException { // 准备对象 User user = new User("虎哥", 18); // 手动序列化 String json = mapper.writeValueAsString(user); // 写入一条数据到redis stringRedisTemplate.opsForValue().set("user:200", json); // 读取数据 String val = stringRedisTemplate.opsForValue().get("user:200"); // 反序列化 User user1 = mapper.readValue(val, User.class); System.out.println("user1 = " + user1); }

f4f6d9572ab544a0bae7e46cc08bfc91.png
f4f6d9572ab544a0bae7e46cc08bfc91.png
7add94945298421da8acead5948712f9.png
7add94945298421da8acead5948712f9.png

小结:

bca593c0a9a0490b95768feac2174218.png
bca593c0a9a0490b95768feac2174218.png

二十二、RedisTemplate操作哈希类型

d2881418632d47618dfb2efffc109ca5.png
d2881418632d47618dfb2efffc109ca5.png
f814838efef742b7930fc16b1821f2b8.png
f814838efef742b7930fc16b1821f2b8.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如有侵权立马删除!!!!!!!!!!
  • 一、Redis入门课程介绍
  • 二、初识Redis-认识NoSQL
    • 1.SQL 与 NoSQL 的区别
  • 三、 初识Redis-认识Redis
  • 四、 初识Redis-安装Redis
    • 单机安装Redis
    • 安装Redis依赖
    • 上传安装包并解压编译并安装
    • 检查是否安装成功(安装目录)
    • 启动
    • 1.默认启动
    • 2.指定配置启动(通过配置文件启动)
      • 修改redis.conf文件中的一些配置:(/name快速搜索文档内容)
      • Redis的其它常见配置:
      • 后台启动)启动Redis:
      • 停止服务
    • 3.开机自启(推荐)
  • 五、redis命令行客户端
    • 常见的options有:
    • commonds就是Redis的操作命令,
    • 进入 redis-cli 的交互控制台:
  • 六、redis的图形化界面客户端
    • 操作示例
    • 连接成功
    • 选库操作(命令)
    • 如果连接不成功
    • 关闭防火墙命令
    • 开启防火墙命令
    • 添加防火墙规则允许 6379 端口
    • 重新加载防火墙配置
    • 修改redis.conf配置文件禁用 protected-mode:
    • 保存配置文件后,重启 Redis 服务:
    • 从外部机器测试连接:
    • telnet安装命令
    • 使用 telnet进行测试
    • 也可以在服务器上面根据服务器地址进行连接尝试
    • 连接失败原因
  • 七、redis命令-数据结构介绍
    • 数据结构介绍
    • 官方文档查看命令
    • 命令行查看官方文档
  • 八、redis命令-通用命令(@genertic)
  • 九、redis命令-String类型
    • 小结:
  • 十、redis命令-Key的层级格式
    • 思考:如何区分不同类型的key
    • Key的结构
    • 示例:
    • 以冒号隔开,形成层级结构
    • 总结:
  • 十一、redis命令-Hash类型
    • 示例:
    • HSET
    • HGET
    • HMSET
    • HGETALL
    • HKEYS
    • HVALS
    • HINCRBY
    • HSETNX
    • 小结:
  • 十二、redis命令-List类型
    • lpush
    • lpop
    • rpop
    • lrange
    • blpop
    • brpop
    • 思考三连:如何用list结构模拟栈、队列、阻塞队列
  • 十三、redis命令-Set类型
    • 对单个集合操作
    • sadd
    • smembers
    • srem
    • sismember
    • scard
    • sinter交集
    • sdiff差集
    • sunion并集
    • 案例练习
  • 十四、redis命令-SortedSet类型
    • 案例:SortedSet命令练习
    • 将班级的下列学生得分存入Redis的SortedSet中:
  • 十五、Redis的客户端-客户端对比
    • 十六、Jedis快速入门
    • 1.引入依赖:(官网地址可以找到)
    • 2.建立连接
    • 3.测试String
    • 4.释放资源
    • 小结
    • 十七、Jedis的连接池
    • 实现连接池的使用
    • 从池子里获取连接
    • 释放资源则会归还到连接池
  • 十八、认识SpringDataRedis
    • SpringDataRedis快速入门
    • 1.引入依赖(Redis依赖,连接池依赖)
    • 2.配置文件
    • 3.注入RedisTemplate
    • 4.编写测试
    • 示例:
    • 小结
  • 二十、SpringDataRedis的序列化方式 (自动序列化)
    • 自定义RedisTemplate的序列化方式
    • 传入字符串
    • 传入对象
  • 二十一、StringRedisTemplate(序列化默认String方式)
    • 手动序列化 (多了手动处理的过程)
    • StringRedisTemplate
    • 存储对象
    • 小结:
  • 二十二、RedisTemplate操作哈希类型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档