redis介绍

redis介绍

作者:jelly
花名:果冻
写于:2021.8.24
更新时间:2022.6.29

1.背景
1.高并发
2.数据量大

2.定义
非关系性数据库,特征如下:
1.数据存储内存
2.存储的数据表无对应关系

3.常用基本类型

  • string

添加/获取/删除操作

127.0.0.1:6379> set name guozhong
OK
127.0.0.1:6379> get name
"guozhong"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379>
127.0.0.1:6379> mset name guozhong age 27
OK
127.0.0.1:6379> mget name age
1) "guozhong"
2) "27"
127.0.0.1:6379> strlen name
(integer) 8
127.0.0.1:6379> append name haoren
(integer) 14
127.0.0.1:6379> get name
"guozhonghaoren"
127.0.0.1:6379>
127.0.0.1:6379> incr money
(integer) 1
127.0.0.1:6379> get money
"1"
127.0.0.1:6379> incrby money
(error) ERR wrong number of arguments for 'incrby' command
127.0.0.1:6379> incrby money 2
(integer) 3
127.0.0.1:6379> get money
"3"
127.0.0.1:6379> decrby money 1
(integer) 2
127.0.0.1:6379> get noney
(nil)
127.0.0.1:6379> get money
"2"
127.0.0.1:6379>
  • hash
127.0.0.1:6379> hset user fans 80
(integer) 1
127.0.0.1:6379> hget user
(error) ERR wrong number of arguments for 'hget' command
127.0.0.1:6379> hget user fans
"80"
127.0.0.1:6379> hdel user fans
(integer) 1
127.0.0.1:6379> hget user fans
(nil)
127.0.0.1:6379>
127.0.0.1:6379> hmset user name guozhong age 28
OK
127.0.0.1:6379> hmget user name age
1) "guozhong"
2) "28"
127.0.0.1:6379> hlen user
(integer) 2
127.0.0.1:6379> hexists user name
(integer) 1
127.0.0.1:6379> hexists user age
(integer) 1
127.0.0.1:6379> hexists user hh
(integer) 0
127.0.0.1:6379>
127.0.0.1:6379> hkeys user
1) "name"
2) "age"
127.0.0.1:6379> hvals user
1) "guozhong"
2) "28"
127.0.0.1:6379>
  • list
  • set

4.redis通用指令

127.0.0.1:6379> ttl name
(integer) -2
127.0.0.1:6379> expire name 2
(integer) 0
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> keys name
(empty array)
127.0.0.1:6379> keys *
1) "money"
2) "user"
3) "age"
127.0.0.1:6379> rename money name
OK
127.0.0.1:6379> get name
"2"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> ping
PONG
127.0.0.1:6379[1]> echo hh
"hh"
127.0.0.1:6379[1]> quit

5.java实现连接redis
pom.xml

 <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
 </dependency>
/**
 * 测试连接redis服务
 */

public class TestRedis {


    public static void main(String[] args) {

        String ip="192.168.66.161";
        int port=6379;

        Jedis jedis=new Jedis(ip, port);

        jedis.set("test1","hello world");

        System.out.println(jedis.get("test1"));

       jedis.close;
    }
  控制台输出 hell world

6.redis持久化

RDB
将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据
在这里插入图片描述

1)执行bgsave命令,Redis父进程判断当前是否存在正在执行的子进程,如RDB/AOF子进程,如果存在bgsave命令直接返回。

2)父进程执行fork操作创建子进程,fork操作过程中父进程会阻塞,通过info stats命令查看latest_fork_usec选项,可以获取最近一个fork操作的耗时,单位为微秒。

3)父进程fork完成后,bgsave命令返回“Background saving started”信息并不再阻塞父进程,可以继续响应其他命令。

4)子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。执行lastsave命令可以获取最后一次生成RDB的时间,对应info统计的rdb_last_save_time选项。

5)进程发送信号给父进程表示完成,父进程更新统计信息,具体见info Persistence下的rdb_*相关选项。

AOF
将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注点在数据的操作过程
在这里插入图片描述
1)所有的写入命令会追加到aof_buf(缓冲区)中。

2)AOF缓冲区根据对应的策略向硬盘做同步操作。

3)随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩的目的。

4)当Redis服务器重启时,可以加载AOF文件进行数据恢复。

次部分参考https://blog.csdn.net/fjj15732621696/article/details/81842075

7.redis事务

multi 开启
exec  执行
discard 取消事务
watch   监听事务
unwatch 取消事务
setnx 设置锁
expire 释放锁

7.主从复制

在这里插入图片描述
全量复制-部分复制
RDB AOF

slaveof ip port

8.哨兵模式
在这里插入图片描述

9.集群模式

10.springboot项目应用
maven依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
        <!--<version>2.1.4.RELEASE</version>-->
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
    <!-- fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.68</version>
    </dependency>

redis序列化方式配置

@Configuration
public class RedisConfig {

/**
 * 设置Redis序列化方式,默认使用的JDKSerializer的序列化方式,效率低,这里我们使用 FastJsonRedisSerializer
 * @param redisConnectionFactory
 * @return
 */
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
    // key序列化
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    // value序列化
    redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));
    // Hash key序列化
    redisTemplate.setHashKeySerializer(new StringRedisSerializer());
    // Hash value序列化
    redisTemplate.setHashValueSerializer(new StringRedisSerializer());
    redisTemplate.setConnectionFactory(redisConnectionFactory);
    return redisTemplate;
}

1:Redis的String数据结构
设置当前的key以及value值

redisTemplate.opsForValue().set(key, value)
redisTemplate.opsForValue().set("num","123");

参考文档
https://blog.csdn.net/lanfeng_lan/article/details/121152461

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫果冻

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值