Redis是什么
https://blog.csdn.net/Little_Oranges/article/details/121870705
1.简介
基于字典格式的。基于内存,高性能的。键值对的方式进行存储。可以存储多种数据结构类型的数据。
2.应用场景
- 缓存
- 排行榜
- 计数器
- 分布式会话
- 分布式锁
- 社交网络
- 最新列表
- 消息系统
3.Redis基本特征
- 支持数据类型多
- 支持事务
- 支持持久化
- 支持主层复制
3.1数据类型
key-value的形式,字典保存。
- 字符串
- hash表
- list列表
- set集合
- 有序set
3.2持久化
会把内容保存到文件中去的。
3.3支持事务
执行命令的时候会按照顺序其他的顺序不能插入到当前事务列表中
3.4主从复制
主从复制。A主服务器复制到B从服务器上。支持多个从属服务器。
4.安装和配置
4.1下载安装
下载的版本不是很高3.0.504
https://github.com/MicrosoftArchive/redis/releases
4.2启动服务端
解压输入对应的命令。
redis-server redis.windows.conf
或者是双击。redis-server.exe
都会出现下面的界面。
4.3启动客户端
在4.2不关闭的情况下。
在当前的目录下输入如下内容
双击redis-cli.exe或者是输入
redis-cli.exe -h 127.0.0.1 -p 6379
- h是ip地址
- p是端口
- 类似连接mysql数据库时候的输入的内容
都可以出现下面的内容。
4.4使用redis
设置键值对和取出键值对
测试
set name 'zhangsan' //set 键 键值
get name //get 键
例如:
set name 'zhangsan'
get name
4.5退出redis客户端
输入quit
4.6配置密码
- 打开 Redis 配置文件。默认情况下,Redis 的配置文件位于 Redis 服务器的安装目录下,具体文件名为 redis.conf。
- 在配置文件中找到 # requirepass foobared 这一行,将前面的注释符号 # 去掉,并将后面的 foobared 替换为你想要设置的密码。例如,你可以将其修改为 requirepass your-password。
- 保存并关闭配置文件。
- 重新启动 Redis 服务器,让新的密码配置生效。
此时再去登陆的 时候需要带上密码了。
redis-cli -h 127.0.0.1 -p 6379 -a your-password
采用密码的形式进行登录。
4.6SpringBoot中使用redis
4.6.1springboot中使用Redis的依赖
- 起步依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</dependency>
4.6.2配置redis
扩展内容:
Jedis和Lettuce都是Java环境下使用的Redis客户端库,用于连接和与Redis服务器进行通信。它们之间的主要区别可以总结如下:
- 线程模型:Jedis使用的是阻塞式(synchronous)的IO模型,每个操作都会阻塞当前线程,直到收到响应或超时。这意味着在高并发场景下,如果一个操作的响应时间很长,它将会阻塞其他操作的执行。Lettuce则使用了非阻塞式(asynchronous)的IO模型,底层网络通信是基于Netty框架实现的,通过异步操作和回调来实现高并发。
- 连接方式:Jedis在使用时需要创建多个连接实例,并且每个连接实例在多线程环境下都不是线程安全的,因此在多线程场景中,需要使用连接池来管理连接。而Lettuce则支持基于Netty的多路复用连接,可以在多个线程之间共享一个物理连接。
- 功能扩展:由于Lettuce使用异步模型,它能够利用Reactive编程风格,提供更强大的功能扩展。Lettuce支持响应式编程范式,可以轻松使用类似于Reactor或RxJava的响应式流处理操作。
- 高可用性:Lettuce提供了更灵活和可靠的Redis Sentinel和Redis Cluster支持,可以更好地处理Redis服务器的故障转移和分片等情况。
总的来说,Jedis更适合于单线程环境下的简单应用,而Lettuce则更适合于多线程并发或需要更高级特性的应用。选择使用哪个取决于你的应用场景和需求。
# 应用服务 WEB 访问端口
server.port=8080
#主机
spring.redis.host=127.0.0.1
#端口
spring.redis.port=6379
#密码
spring.redis.password=123456
#下面的不是必须的
#默认的数据库索引
#Redis默认情况下有16个分片,这里配置具体使用的分片,默认是0
spring.redis.database=0
#超时时间
spring.redis.timeout=3000
#连接池中最大的连接数
spring.redis.lettuce.pool.max-idle=8
#连接池中最小的连接数,当小于这个数的时候就会创建新的连接
spring.redis.lettuce.pool.min-idle=0
#最大活跃数(超过的会进行请求等待)
spring.redis.lettuce.pool.max-active=8
#lettuce和Jedis是Java环境下使用的Redis客户端库,用于连接和与Redis服务器进行通信
4.6.3config配置
RedisTemplate是Spring提供的操作Redis恶的高级模板类工具
@Bean注解表示可以将redisTemplate方法返回的对象注入到spring容器中,供后续使用
配置的主要目的是提供一个可以被其他组件自动注入的RedisTempate实例。方便应用程序执行的时候和Redis服务器进行交互:读取 写入和删除
好处是不用编写原始的客户端代码
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<byte[], byte[]> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
//序列化器有很多
template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
return template;
}
}
4.6.4测试代码
@SpringBootTest
class RedisApplicationTests {
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void setValue(String key, String value) {
redisTemplate.opsForValue().set(key, value);
}
public String getValue(String key) {
return redisTemplate.opsForValue().get(key);
}
public void deleteKey(String key) {
redisTemplate.delete(key);
}
@Test
void contextLoads() {
setValue("name","张三");
System.out.println(getValue("name"));
deleteKey("name");
System.out.println(getValue("name"));
}
}
4.6.5redis客户端
常见的几款redis的客户端的地址
https://blog.csdn.net/m0_67392811/article/details/123791905
4.6.6redis常见操作的命令
官方文档http://www.redis.cn/commands.html
(1)对value操作的命令
(2)对String操作的命令
(3)对List操作的命令
(4)对Set操作的命令
(5)对Zset操作的命令
(6)对Hash操作的命令
(7)持久化操作命令
(8)远程服务控制命令
4.7redis的用途
1.redis可以作为数据库,缓存和消息中间件
2.中间件是什么?
白话就是使用这项服务的人不需要知道底层逻辑的具体实现,就可以拿着中间件的结果来用
- 中间件是介于应用系统和系统软件之间的一类软件,它所使用系统软件所提供的基础服务,可以限界网络上的应用系统各个部分或者是不同的应用达到资源功能共享的目的。
- 中间件是独立的系统软件程序。
4.7.1redis作为消息中间件
消息中间件关注的是消息的发送和接收。利用的是高效可靠的异步消息传递机制进行平台无关的数据交流。并基于数据通信集成分布式系统。
redis利用的是广播和订阅模式。生产者产生一个消息,中间件复制并产生多个消息队列。
演示:
- 启动服务端
- 启动客户端:订阅am频道,subscribe am
- 启动另外一个客户端向服务器推送am频道的消息
- 此时订阅了am频道的客户端,接收到了消息