第 1 章
Redis介绍
第 2 章
摘要
第 3 章
Redis安装
3.1、Windows
3.1、下载解压
3.2、启动
在解压文件夹路径栏输入cmd,然后输入redis-server redis.windows.conf就可以启动成功。
3.2、Linux CentOS安装Redis
3.2.1、下载
到Redis官网https://redis.io/download/下载源码安装包,上传到Linux服务器的指定目录。
3.2.2、准备运行环境
// #redis是基于C语言开发,所以编辑redis源码需要安装gcc
yum install -y gcc-c++ autoconf automake
// #centos7 默认的 gcc 默认是4.8.5,版本⼩于 5.3 ⽆法编译,
// 需要先安装gcc新版才能编译
// 查看gcc版本号
gcc -v
// #升级新版gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
// 配置gcc版本永久生效
scl enable devtoolset-9 bash
echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
// 解压redis源码安装包
tar -zxvf redis-7.2.3.tar.gz
// 重命名
mv redis-7.2.3/ redis7
// 进入到redis里面
cd redis7
// 在安装包里面编译redis
make
// 创建redis文件夹
mkdir -p /usr/local/redis
// 编译好redis后,就将安装redis
make PREFIX=/usr/local/redis install
3.2.3、设置redis配置文件
vim redis.conf
# 绑定地址,默认为 127.0.0.1,即只接受本地连接
# bind 127.0.0.1
#任何ip可以访问,这里可以指定那些ip可以访问
bind 0.0.0.0
#守护进程
daemonize yes
#密码
requirepass ************
# 保护模式,默认为 yes,开启后仅允许本地连接
protected-mode yes
# Redis 监听的端口号,默认为 6379
port 6379
# TCP 连接队列长度,默认为 511
tcp-backlog 511
# 客户端空闲连接超时时间,单位为秒,0 表示不超时断开
timeout 0
# TCP keepalive 参数,用于检测挂掉的客户端连接
tcp-keepalive 300
# 是否在后台运行,默认为 no,即在前台运行
daemonize no
# Redis 进程文件路径
pidfile /var/run/redis/redis.pid
# 日志级别,可选值包括 debug, verbose, notice, warn
loglevel notice
#⽇志⽂件路径
logfile "/usr/local/redis/log/redis.log"
# 是否开启AOF功能,默认是no
appendonly yes
# AOF文件的名称
appendfilename "appendonly.aof"
# 表示每执行一次写命令,立即记录到AOF文件
# appendfsync always
# 写命令执行完先放入AOF缓冲区,
# 然后表示每隔1秒将缓冲区数据写到AOF文件,是默认方案
# appendfsync everysec
# 写命令执行完先放入AOF缓冲区,
# 由操作系统决定何时将缓冲区内容写回磁盘
# appendfsync no
# AOF文件体积最小多大以上才触发重写
# auto-aof-rewrite-min-size 64mb
# RDB 持久化配置(可选)
#持久化⽂件名称
dbfilename yxclass.rdb
#持久化⽂件存储路径
dir /usr/local/redis/data
# save <seconds> <changes>
#持久化策略, 100秒内有个5个key改动,执⾏快照
save 100 5
save 5 100
3.2.4、启动redis
cd bin
# 启动命令
./redis-server ../conf/redis.conf
// 启动后就可以通过远程连接工具进行连接redis了。
第 4 章
Redis基本数据类型
4.1、String类型
4.1.1、String类型介绍
4.1.2、Redis的Key结构设计
项目名:业务名:类型:id
4.1.3、String类型的Value
4.1.4、String类型常用命令
1.设置一个 key-value 对,并设置其 300 秒后过期:
SET mykey "Hello Redis" EX 300
GET mykey
SET mykey "Hello again!"
DEL mykey
GET mykey
nil是一个对象指针,通常用于表示Objective-C对象的空值,而null是一个宏定义,其值为0,通常用于表示基本类型或C语言中的空指针。对于nil,可以调用方法,不会产生crash或抛出异常,而null则不能调用方法。
4.2、Hash类型
4.2.1、Hash类型介绍
当需要存储对象的值的时候,String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便,而使用Hash类型能解决这个问题。
4.2.2、常用命令
HSET user:1000 name "远方的音讯"
HSET user:1000 age 24
HGET user:1000 name
HGETALL user:1000
//hget all
HDEL user:1000 age
EXPIRE user:1000 10
//expire
HGETALL user:1000
//hget all
4.3、List类型
4.3.1、List类型介绍
4.3.2、List类型常用命令
1.插入:
LPU mylist "apple" "banana"
// 结果:mylist: banana, apple
RPU mylist "cherry"
// 结果mylist: banana, apple, cherry
LPOP mylist
//结果(返回并移除的元素):"banana"
//更新后的列表:mylist: apple, cherry
RPOP mylist
//结果(返回并移除的元素):"cherry"
//更新后的列表:mylist: apple
LSET mylist 0 "orange"
结果:mylist: orange
这里将索引为0的元素(即列表的头部元素)从"apple"修改为了"orange"。
LRANGE mylist 0 -1
结果返回:"orange"
这里获取了整个列表的内容,由于列表只有一个元素,所以只返回了一个元素。
LINDEX mylist 0
"orange":这里获取了索引为0的元素,即列表的头部元素。
4.3、EXPIRE和PEXPIRE设置有效期:
SET mylist [1 "apple" 2 "banana" 3 "cherry"]
EXPIRE mylist 60
在这个例子中,我们首先使用SET命令创建了一个名为mylist的List,并添加了三个元素。然后,我们使用EXPIRE命令为这个key设置了60秒的过期时间。当60秒过去后,mylist这个key将自动被删除,包括它关联的List数据。
EXPIRE设置的单位是秒,PEXPIRE设置的单位是毫秒值。设置的过期时间是针对整个key的,而不是针对key中的某个元素。这意味着一旦key过期并被删除,与该key关联的所有数据都将丢失。
4.4、Set类型
4.4.1、Set类型介绍
4.4.2、Set类型常用命令
SADD key member [member ...]
SADD myset "apple"
SADD myset "banana" "cherry"
SREM key member [member ...]
SREM myset "banana"
4.查询元素:
SISMEMBER key member
SISMEMBER myset "apple"
// sismember
SMEMBERS key
SMEMBERS myset
//smembers
SCARD key
SCARD myset
//scard
SADD setA 1 2 3
SADD setB 2 3 4
SADD setC 3 4 5
SINTER setA setB setC
//执行上述命令后,将返回交集结果 "3"
//这表明只有数字 3 同时存在于 setA、setB 和 setC 中。
//sinter
SUNION setA setB setC
//将返回并集结果:"1" "2" "3" "4" "5"
//这表明数字 1、2、3、4 和 5 至少存在于一个集合中。
//sunion
SDIFF setA setB
返回差集结果: "1"
//sdiff
4.5、SortedSet类型
4.5.1、SortedSet类型介绍
4.5.2、SortedSet底层介绍
4.5.3、SortedSet常用命令
ZADD myzset 1 "one"
ZADD myzset 2 "two"
ZADD myzset 3 "three"
ZREM myzset "two"
ZINCRBY myzset 1 "one"
//zincrby
ZRANK myzset "one"
//zrank
ZREVRANK myzset "one"
//zrevrank
ZCARD myzset
//zcard
ZSCORE myzset "one"
//zscore
ZRANGE myzset 0 -1
//zrange
ZREVRANGE myzset 0 -1
//zrevrange
ZCOUNT myzset 1 2
//zcount
ZRANGEBYSCORE myzset 1 2
//zrange by score
ZREVRANGEBYSCORE myzset 2 1
//zrange by score
第 5 章
SpringDataRedis
5.2、引入依赖
SpringBoot提供了Spring Data Redis的起步依赖,只需在项目中添加相应的 Redis 依赖,就可以在项目使用RedisTemplate这个类对Redis进行操作。无需深入了解底层细节,简化了开发流程,让开发者能够专注于业务逻辑的实现。
<!--redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--common-pool用于创建和管理对象的池,
<!--以减少创建和销毁对象时的开销。
<!--通过使用对象池,可以重用已经创建的对象,
<!--而不是每次需要时都创建新的对象。
<!--这可以显著提高应用程序的性能和响应时间。-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!--Jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
5.3、配置Redis连接
spring:
redis:
host: yxclass.net
port: 6379
password: **********
// Lettuce连接池
lettuce:
pool:
// 连接池的最大活动连接数。
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 100ms
5.4、自定义序列化
/**
* @description: 配置redis的序列化方式。提高可读性和传输性。
* @author wcj18
* @date 2024-02-04 19:07
* @retrun
*/
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory){
// 创建RedisTemplate对象
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 设置连接工厂
template.setConnectionFactory(connectionFactory);
// 创建JSON序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// 设置Key的序列化
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
// 设置Value的序列化
template.setValueSerializer(jsonRedisSerializer);
template.setHashValueSerializer(jsonRedisSerializer);
// 返回
return template;
}
}
第 6 章
RedisTemplate常用API
6.1、opsForValue
opsForValue操作String类型的数据。操作字符串类型的数据,可以使用RedisTemplate的子类:StringRedisTemplate,它的key和value的序列化方式默认就是String方式,这样可以节省内存空间。当需要存储Java对象时,手动完成对象的序列化和反序列化即可。
5.5.1、手动完成对象的序列化和反序列化
5.5.2、说说你对序列化和反序列化的理解
5.5.3、StringRedisTemplate
使用StringRedisTemplate存储字符串时,可以直接作为value进行存储,存储对象前要先设置自定义序列化,而且实体类要实现Serializable接口。
serialVersionUID用于在反序列化过程中验证序列化和反序列化对象的版本兼容性。这是为了防止在不同版本的类之间进行反序列化时发生错误。
1.存储对象和设置过期时间:
存储对象:set(key,value)。
设置时效:expire(key,时长,单位)。
方法执行结果: