• 【中间件】redis简单使用


    环境需求

    1.系统

    Linux系统和windows都可以,windows的资源自行到 github 上下载,linux的可到 redis官网

    2.环境

    linux需要c++的gcc环境,查看是否安装可以使用命令

    gcc --version
    
    • 1

    在这里插入图片描述

    没有环境的可以使用yum源进行下载

    yum install gcc
    
    • 1

    windows不需要配置环境,一般系统自带c++环境
    在这里插入图片描述

    安装

    1.安装步骤

    # 解压
    tar -zxvf redis-6.2.1.gz 
    
    # 解压后进入文件夹
    cd redis-6.2.1/
    
    # 编译成c文件
    make
    
    # 安装
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    可能遇到 -Jemalloc/jemalloc.h: 没有那个文件,说明gcc没安装好!
    解决方案:编译完成后先删除编译的文件,安装gcc,然后重新编译

    # 清除编译文件
    make distclean
    
    • 1
    • 2

    2.路径和文件

    默认安装目录:/usr/local/bin

    文件名用途
    redis-benchmark性能测试工具
    redis-check-aof修复有问题的 AOF 文件
    redis-check-dump修复有问题的 dump.rdb 文件
    redis-sentinelRedis集群使用
    redis-serverredis服务器启动命令
    redis-cli客户端操作入口

    后台启动

    1.修改配置文件

    将之前的解压文件夹里的redis.conf文件复制到其他地方,并打开

    vi redis.conf
    
    • 1

    daemonize no 改成 yes (128行),并保存
    在这里插入图片描述

    2.后台启动

    进入到安装文件夹

    cd usr/local/bin
    
    • 1

    用修改后的配置文件启动

    # redis-server [修改后的配置文件路径]
    redis-server /root/redis/redis.conf 
    
    • 1
    • 2

    在这里插入图片描述

    3.查看状态

    ps -ef|grep redis
    
    • 1

    在这里插入图片描述

    关闭

    1.杀掉进程

    # 65149是上图的进程号
    kill -9 65149
    
    • 1
    • 2

    2.单实例关闭

    redis-cli shutdown
    
    • 1

    基本指令

    redis

    命令用法
    select 切换数据库(默认0)
    clear清除当前控制台
    keys *查看当前库里所有的key
    flushall清空所有库的内容
    set a b插入一条键为a,值为b的数据(如果有空格,字符串需加引号)
    get a查询键为a的值
    ttl a查看key为’a‘的剩余生命周期时间,-2说明已过期
    append a xyz在a的值后面加一段xyz(字符串拼接)
    strlen a查看a的字符串长度
    incr nn的值自增(n++,值为数字类型)
    decr nn的值自减(n- -)
    incrby n 10n的值加10
    decrby n 3n的值减3
    expire a 15设置a的超时时间是15秒(a已存在)
    setex a 15 xyz设置a的值为xyz,超时时间为15秒(a不存在)
    mset a x b y c z添加多条数据a:x, b:y, c:z
    mget a b c查询多条数据a, b, c

    java

    命令用法
    redisTemplate.opsForValue()操作字符串
    redisTemplate.opsForList()操作List
    redisTemplate.opsForSet()操作Set
    redisTemplate.opsForHash()操作Hash
    redisTemplate.opsForZSet()操作Zset

    redis.conf 解读

    bind 127.0.0.1 -::1
    只允许本地访问redis,注释掉即可远程访问 (#)

    protected-mode yes
    开启保护模式,此时只可以本机访问,需要支持远程访问改成 no 即可

    port 6379
    端口号,默认为6379

    tcp-backlog 511
    tcp连接队列长度,包括已连接和正在连接的,高并发状态下需要提高这个值

    timeout 0
    超时参数,尝试连接redis但未连接上一段时间后停止尝试连接,默认为0 永不超时

    tcp-keepalive 300
    心跳时间,每隔某个(这里是300s)时间,检测是否redis还活着(有操作),如果不或者就断开redis的连接

    daemonize yes
    允许redis后台启动,即关闭终端redis仍可运行

    loglevel notice
    日志级别:
    debug:在开发中使用debug能看到更详细的日志
    verbose:java里info级别日志
    notice:用于生产环境
    warning:记录重要的信息

    logfile “”
    日志输出路径,默认为空

    databases 16
    库的数量

    # requirepass foobared
    密码,默认无密码

    # maxclients 10000
    客户端最大连接数,默认无上限

    # maxmemory
    最大内存值,默认无上限

    # maxmemory-policy noeviction
    超过最大内存值的拒绝策略,默认无
    volatile-lru:使用LRU(最近最少使用)算法移除key,只对设置了过期时间的键
    allkeys-lru:对所有key进行LRU算法移除
    volatile-random:随机移除key,只对设置了过期时间的键
    allkeys-random:在所有key里随机移除
    volatile-ttl:移除ttl最小的key,即最近要过期的
    noeviction:不移除,写入过多时返回错误信息

    springboot整合

    1.依赖

    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-data-redisartifactId>
    dependency>
    
    <dependency>
       <groupId>org.apache.commonsgroupId>
        <artifactId>commons-pool2artifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.application.yml

    spring:
      redis:
        # 主机号
        host: 192.168.xx.xxx
        # 端口号
        port: 6379
        # 数据库号
        database: 0
        # 超时时间(毫秒)
        connect-timeout: 1800000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3.配置类

    @EnableCaching
    @Configuration
    public class RedisConfig extends CachingConfigurerSupport {
        @Bean
        public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
            RedisTemplate<String,Object> template = new RedisTemplate<>();
            RedisSerializer<String> redisSerializer = new StringRedisSerializer();
            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            jackson2JsonRedisSerializer.setObjectMapper(om);
            template.setConnectionFactory(factory);
            //key序列化方式
            template.setKeySerializer(redisSerializer);
            //value序列化方式
            template.setValueSerializer(jackson2JsonRedisSerializer);
            //value hashmap序列化
            template.setHashValueSerializer(jackson2JsonRedisSerializer);
            return template;
        }
        
        @Bean
        public CacheManager cacheManager(RedisConnectionFactory factory){
            RedisSerializer<String> redisSerializer = new StringRedisSerializer();
            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
            //解决查询缓存转换异常问题
            ObjectMapper om = new ObjectMapper();
            om.setVisibility(PropertyAccessor.ALL,JsonAutoDetect.Visibility.ANY);
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            jackson2JsonRedisSerializer.setObjectMapper(om);
            //配置序列化(解决乱码问题),过期时间600秒
            RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                    .entryTtl(Duration.ofSeconds(600))
                    .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                    .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                    .disableCachingNullValues();
            RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                    .cacheDefaults(config)
                    .build();
            return cacheManager;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    常见错误

    如果上面的都配置过了,还有错误 unable to connect···· ,那应该是没关闭防火墙。

    cd/etc/sysconfig
    ll
    # 如果未看到 iptable 文件
    yum install iptables-services
    # 等待安装完成
    systemctl enable iptables
    systemctl start iptables
    # 查看防火墙状态
    service iptables status
    # 关闭防火墙
    service iptable stop
    # 打开防火墙
    service iptable start # (本次有效,下次开机后恢复原设置)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    java毕业生设计校园网上跳蚤书市系统计算机源码+系统+mysql+调试部署+lw
    想找就能找!如何找回iPhone中被隐藏或主屏幕上被删除的应用程序
    COMP26020 Part 1 Lab Assignment:Matrix Processing Library in C
    Mybatis动态SQL解析
    【漏洞分析】KaoyaSwap 安全事件分析
    探索 Electron:窗口菜单以及生命周期和对话框讲解
    Appium+Pytest+Allure实现APP自动化测试,小试牛刀
    Debezium-增量迁移之 Oracle 迁移所需权限
    向量以及矩阵
    openocd stm32 telnet 调试
  • 原文地址:https://blog.csdn.net/weixin_52122251/article/details/126321410