【Redis | 基础总结篇 】

发布于:2025-05-07 ⋅ 阅读:(20) ⋅ 点赞:(0)

目录

前言:

1.Redis的介绍:

2.Redis的类型与命令:

3.Redis的安装:

3.1.Windows版本

3.2.Linux版本

4.在java中使用Redis:

4.1.介绍

4.2.Jedis

4.3.Spring Data Redis


前言:

本篇主要讲述了Redis的介绍与命令与安装,以及在java中如何使用Redis

1.Redis的介绍:

1.1.Redis(Remote Dictionary Server)是一款高性能的开源内存数据库,常被用作缓存、消息中间件、实时数据处理等场景。它以键值存储为核心,支持多种数据结构,并具备持久化、高可用、分布式等特性。

1.2.核心特性:

        1.2.1.内存存储:

                        1.数据主要存储在内存中,读写速度极快(可达10万+/秒 QPS),适合高性能场景。

                        2.通过持久化机制(RDB/AOF)可将内存数据保存到磁盘,防止数据丢失。

       1.2.2.丰富的数据结构:Redis不仅支持简单的字符串(String),还提供以下数据结构:

                          1.Hash:键值对的集合,适合存储对象(如用户信息)。

                          2. List:有序元素列表,支持双向操作,可用于消息队列。

                          3.Set:无序唯一元素集合,适合去重和集合运算(交集、并集)。

                          4.Sorted Set:有序集合,通过分数(score)排序,适用于排行榜。

                          5.Bitmap/HyperLogLog/Stream:扩展功能如位操作、基数统计、流式数据处理。

       1.2.3.持久化机制:

                          1.RDB(快照):定期生成数据快照,适合备份和快速恢复。

                           2.AOF(追加日志):记录所有写操作命令,数据安全性更高。

        1.2.4高可用与扩展:

                          1.主从复制:支持一主多从架构,从节点同步主节点数据,实现读写分离。

                           2.哨兵(Sentinel):监控主节点状态,自动故障转移,保障高可用。

                           3.集群(Cluster):分布式模式,数据分片存储,支持横向扩展。

        1.2.5原子性与事务

                          1.单线程模型保证命令原子性执行。

                          2.支持事务(MULTI/EXEC)和Lua脚本,实现复杂操作。

2.Redis的类型与命令:

2.1.Redis的数据类型

2.2.Redis字符串类型命令:

 

2.3.Redis哈希类型命令:

2.4.Redis列表类型命令:

2.5.Redis集合类型命令:

2.6.Redis有序集合类型命令:

2.7.Redis通用命令:

2.8.总结:

        1.在Redis命令使用时返回的是1就代表执行成功,0就是失败

        2.在字符串类型命令中set与setnx的区别set是如果key存在,那么会覆盖之前value(没有就创建,有就不覆盖),而setnx则是key存在,不会覆盖(没有就创建,有就不操作

        3.在字符串类型命令中setex可以设置过期时间(指定30秒,30秒后结束那么Redis就会自动删除该key),所以我们可以想到什么场景 =》验证码(它是会过期的

        4.在哈希类型命令中没有什么注意的,不过哈希的key与field不好记忆,一个简单理解的方法

=》你将key看作Mysql中的table(表),而field就是表中的ID,value就是具体的数据

        5.在列表类型命令中要注意一下添加命令lpush:它每次添加数据都是从最左侧添加先添加a后添加b,那么它们的顺序是:b a)(看作队列)

        6.在列表类型命令中怎么使用查询命令lrange:就是指定索引,开始索引和结束索引(结束索引有点不同与java),开始索引(一般写0,索引从0开始的),而结束索引(写-1代表列表的最后一个元素,-2代表倒数第二个元素,依次推)

        7.在有序集合类型(不允许重复,分数为double类型)命令中查询命令zrange中可以加一个参数:withscores,加了这个参数会将分数也查询出来,没有就只会查询所有元素

        8.在有序集合类型(不允许重复)命令中添加分数命令zincrby:是在原先分数的基础上添加分数(现在=原先+要添加值

        9.在通用命令中keys命令:可以写(keys *)查询所有key ,这样写(keys set*)查询前缀为set的key

        10.执行范围的对于命令时,该范围是闭区间

        11.Redis默认升序排序

3.Redis的安装:

3.1.Windows版本

3.1.1.关于Windows版本的安装就没有Linux的复杂只需要找到对应的网站下载安装包就行,不过Redis的Windows版本似乎好久没有更新了。

3.1.2.在Redis中没有用户名的概念,只有密码在Windows版本中是在配置类中更改密码)

在该配置类中找到

将注释解除,requirepass 后面接的就是你的密码(注意:requirepass 前面的空格也要删除)

3.1.3.运行:

1.在安装Redis的所在目录运行cmd

2.输入:redis-server.exe redis.windows.conf

3.效果:

3.2.Linux版本

3.2.1.安装步骤:

3.2.1.准备Linux版本的Redis的tar

3.2.2.首先需要安装Redis所需要的gcc依赖:在Linux中输入命令: yum install -y gcc tcl

3.2.3.然后上传tar包到任意目录

3.2.4.解压缩包:例如:tar -zxvf redis-6.2.6.tar.gz

3.2.5.进入redis目录: cd redis-6.2.6

3.2.6.运行编译命令: make && make install (执行成功就安装成功了)

3.2.2.启动方式:

1..默认的安装路径是在 /usr/local/bin目录下:具体的文件作用

  • redis-cli:是redis提供的命令行客户端

  • redis-server:是redis的服务端启动脚本

  • redis-sentinel:是redis的哨兵启动脚本

2..redis的启动方式有很多种,例如:

  • 默认启动

  • 指定配置启动

  • 开机自启

3..默认启动:

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

4..指定配置启动:

如果要让Redis以后台方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下,名字叫redis.conf。

1.先进行备份防止出现错误:cp redis.conf redis.conf.bck

2.执行命令:vi redis.conf (进入文件中修改配置)

3.找到允许访问地址:默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问(按进入编辑然后修改地址,按Esc退出编辑)

4.找到守护进程,修改为yes后即可后台运行:

先退出编辑,然后输入/daemonize即可快速找到对应daemonize(没有找到就按n切换到下一个daemonize)

5.找到密码,设置密码:

先退出编辑,然后输入/requirepass即可快速找到对应requirepass(没有找到就按n切换到下一个requirepass),将注释解除,requirepass 后面接的就是你的密码(注意:requirepass 前面的空格也要删除)

6.设置日志文件:默认为空,不记录日志,可以指定日志文件名,便于查看(本来是空字符串即不记录日志,在双引号里面填写的内容就是日志文件名称)

7.注意:设置了密码:开启服务时需要指定对应密码

5. 开机自启:

首先,新建一个系统服务文件: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

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

# 启动 systemctl start redis

# 停止 systemctl stop redis

# 重启 systemctl restart redis

# 查看状态 systemctl status redis

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

6.注意:记得开启Linux的防火墙对于端口6379:firewall-cmd --zone=public --add-port=6379/tcp --permanent,然后重新加载:firewall-cmd --reload

4.在java中使用Redis:

4.1.介绍

Redis的java客户端一般经常使用的有:Jedis,Lettuce,Redisson,而Spring已经整合了Jedis,Lettuce ==》Spring Data Redis

Jedis:完全以Redis的命令来作为方法名称,简单实用,但是它的实例是线程不安全的,多线程的环境下需要基于连接池来使用

Lettuce:它是基于Netty实现的,支持同步,异步和响应式编程方式并且线程是安全的,支持Redis的哨兵模式,集群模式,管道模式

Redisson:它基于Redis实现的分布式,可伸缩的java数据结构集合

4.2.Jedis

1.实现:

1.引入依赖:

2.建立连接:

3.实现功能:

4.释放资源:

2.注意:

Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能的损失,所以推荐使用Redis的连接池来代替Jedis的直连方式

 

4.3.Spring Data Redis

1.注意: Spring Data Redis 虽然整合了Jedis,Lettuce,但是默认使用的是Lettuce,如果要使用Jedis那么需要引入它的依赖

2.实现:

1.引入依赖:

2.配置文件:

3.注入RedisTemplate并使用

 3.使用RedisTemplate时,Spring默认使用的是JdkSerializationRedisseriallzer序列化器,而它会将要存入Redis的key与value先转变成字节存入(缺点:在Redis中不易阅读全是字节,内存消耗大)

4.两种方案:

方案一:

        1.自定义RedisTemplate 

        2.修改序列化器

        3.解释:因为key一般只会使用String类型,而value不确定,那么你可以认为它是一个对象(对象就全部包含了),所以key使用StringRedisSerializer序列化器,value使用GenericJackson2JsonRedisSerializer序列化器

        4.注意:因为value使用了对象的序列化器转换器,当你服务器访问Redis数据时,你是不是需要知道这个value对应的类(class字节码),所以存入Redis时value除了存入对象里面的值还会存入对应对象的字节码class类型(为了反序列化时知道对象类型),所以依然也会造成额外的内存损失

方案二:

        1.使用SpringRedisTemplate

        2.存入Redis时,如果要存入对象,那么手动将对象序列化JSON

        3.读取Redis时,如果要读对象,那么手动将JSON反序列化成对象

        4.解释:SpringRedisTemplate是Spring提供好的,直接注入就可以使用,并且key与value都是使用的String序列化器,因此需要手动转换对象


网站公告

今日签到

点亮在社区的每一天
去签到