一.Redis是什么?
可以理解为一种非关系型数据库,中间键,但是严格的说不是数据库,是一种数据结构化存储方法的集合,不遵守sql标准,事务,
1.2为什么大家要用它可以干什么?
A-数据存在内存上的,存取速度快,不易丢失,
B-可以进行存储的类型有五大类型
C-可进行集群和事务的操作
D-对多个语言的客户端都有接口,比较方便
一般的在实际的项目上的用处在:做缓存,登录时存储信息,排行榜,防止线程安全的计数器等
二.Redis的安装和使用
2.1下载的地址
中文官网:CRUG网站
下载之后直接进行解压即可玩
2.2使用命令启动redis
可直接进行双击,但是建议是cmd启动
2.2redis的五大数据类型--基本命令操作
A-String类型 -key —value类型
set name XX --设置key为name 值为xx
get name xx 获取key为name 值为xx
mset (设置多个值) mget(获取多个)
太多了截图自己看吧
B-List类型
C-key类型
D-set类型
E-hash类型
2.3实战使用java操作redis
基于SpringBoot项目进行搭建之下
相应的导入依赖包
<!--spirngboot springdata对redis支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
在配置文件进行相关基本的的配置
redis:
database: 0
host: 127.0.0.1
port: 6379
password: 123456
jedis:
pool:
max-wait: 2000ms
min-idle: 2
max-idle: 8
在代码里面进行使用
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test(){
redisTemplate.opsForValue().set("redis","string类型");
System.out.println(redisTemplate.opsForValue().get("redis"));
}
注意这里会有一个序列化的问题,
当我们把对象放到redis的时候在拿出来的时候会有一个序列化的问题,所以我们需要进行反序列化的操作,
方法一:你要放到redis的对象进行实现Serializer接口,但是这样每个要放的类进行进行实现,
方法二:对redis进行改造,
放弃之前的redis接口,用下面的redis进行项目中的操作
/缓存的配置
@Configuration
public class RedisConfig {
@Resource
private RedisConnectionFactory factory;
//使用JSON进行序列化
@Bean
public RedisTemplate<Object, Object> redisTemplate() {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(factory);
//JSON格式序列化
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
//key的序列化
redisTemplate.setKeySerializer(genericJackson2JsonRedisSerializer);
//alue的序列化
redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
//hash结构key的虚拟化
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
//hash结构value的虚拟化
redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
return redisTemplate;
}
}
不同的点在进行引入的时候 使用序列化的redis
//序列化的redis
@Autowired
private RedisTemplate<Object,Object> redisTemplate;
3.redis的持久化
有无redis是基于内存来实现的,为了防止宕机等造成的数据的丢失,
redis吧内存里面的数据进行备份到另一个磁盘,
redis的两种持久化方式:AOP ,RDB
-
RDB:记录数据快照
优点:
1.产生一个持久化文件,方便文件备份 , 灾难恢复RDB是非常不错的选择
2.Fork子进程去持久化, 性能比AOF好,文件体积更小,启动时恢复速度快
缺点:
1.没办法100%s数据不丢失
2.数据集大,FORk子进程持久化时会服务器卡顿
AOF: 记录写命令
优点:
1.数据更安全
2.采用Append,即使持久的时候宕机,也不影响已经持久的数据
3.日志过大,可以rewrite重写
4.AOF日志格式清晰,容易理解
缺点:
1.AOF文件通常要大于RDB文件
2.AOF数据恢复比RDB慢
最佳实践:二者结合 ,RDB来数据备份,迁移,容灾 。 AOF持久化保证数据不丢失。
4.Redis的淘汰机制
有哪些淘汰机制呢?
-
volatile-lru :从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
-
volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
-
volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
-
allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
-
allkeys-random:从数据集中任意选择数据淘汰
-
no-enviction:不使用淘汰
对于修改配置redis.window.conf,修改maxmemory来调制淘汰机制
关于redis的东西还有很多不止,比如哨兵模式,cluster集群,做缓存遇到的雪崩,击穿,穿透,等
本文章只是在于让初学者快速在项目里面进行使用到redis这个中间件而已,后续推出redis深入版
欢迎进行学习交流,不足之处请指出,喜欢麻烦点赞+收藏,谢谢各位大佬了