Redis

本文详细介绍Redis的基本概念、安装步骤、常用命令及其应用场景,并分享了在JavaWeb项目中配置Redis的常见问题与解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis


概述

  • Redis 单线程
  • 数据类型:string 、hash (map) 、list 、set 、zset

安装

  • Windows
    • 安装1
    • 使用
      • Windows + R --> 打开运营窗口
      • cd … 到安装目录
      • 启动服务端
        • redis-server.exe redis.windows.conf
      • 异常提示
        • Creating Server TCP listening socket *:6379: bind: No error 端口号被占用,服务可能已经启动过了
      • 连接客户端
        • redis-cli.exe -p 6379 -h 127.0.0.1 -a 123456
        • p:端口号 h:连接地址 a:认证秘钥

管理工具

  • 工具:redis-desktop-manager2
  • 使用:
    • 命令窗口:选择database 右键 Console

命令3

类型命令含义
systemset db_number 1设置默认存储数据的database
systemget db_number查询dababase
systemselect 1切换database
stringkeys *模糊匹配KEY值
hashhgetall key获取KEY中的Field及Value
hashhlen myhash查询 Redis KEY 中 Field 的个数
list4lpush key value队列左侧(队首)添加value
listrpush key value队列右侧(队尾)添加value
listlrange key 0 -1输出队列内容
listlpop key队列左侧(队首)移除一个元素
listlpop key队列右侧(队尾)移除一个元素

其他

  • 项目:页面添加检索功能,不使用数据like,频繁操作数据库;使用Redis的Hscan功能

    • 存储:做DEMO验证功能时,通过CMD打开客户端,将Key 或 Field 设置为中文,CMD中都会将中文转译为相应的字符表示格式,而不是对应的中文内容;使用管理工具的Console命令即可正常存放中文
    • 命令:hscan redis_key 0 match regex
    • 0 游标,从第几行开始检索
    • regex 匹配正则表达式
  • 异常:Java Web 项目配置Redis ,启动时提示 Could not get a resource from the pool

    • 原因:检查安装 Redis 时是否设置了密码;修改 Java Web 项目中相关配置文件是否有遗漏,程序运行时加载 application.properties ,是否只修改了 test-application.properties
  • 异常:Java Web 项目配置Redis ,启动时提示 Constructor threw exception; nested exception is java.lang.StringIndexOutOfBoundsException: String index out of range: -1

    • 原因:application.properties 中配置 redis.host = 127.0.0.1 没有配置端口号,所以报错
    • 修正:redis.host = 127.0.0.1:6379
  • 大坑:hscan redis_key cursor match “regex” 使用 hscan 检索 hash 结果的Redis数据中的Key值,测试 DEMO 完全正常,但实际提测过程中出现检索不到的情况

  • 问题:Java 操作 Hset 返回 0 ,此处的0不是表示当前操作不成功,而是 field 已存在

  • 存放 Map 时,如果不能找到有效 seHash 方法,直接使用 set 方法,value 为 Map.class


批量写入

  • Jedis pipeline
  • pipeline.asyn() 同步返回结果

检索

  • keys * 建议禁止使用
  • keys *进行模糊匹配引发Redis锁,造成Redis锁住
  • 会导致原本应该请求Redis的请求直接请求数据库,导致数据库负载短时间内急剧升高
  • 事故示例4

使用规范5

1.冷热数据分离,不要将所有数据全部都放到Redis中
按需配置而不是将所有DB查询都放入Redis,要判断是否有必须要这样去做

2.不同的业务数据要分开存储

3.存储的Key一定要设置超时时间
禁止一律设置过滤时间0,永不过期,很多时候怕麻烦或不好设置过期时间直接永久过期而忘记清理,浪费存储空间

4.线上Redis禁止使用Keys正则匹配操作

5.谨慎全量操作Hash、Set等集合结构
禁止 hgetall 操作

6.key 值命名长度不宜过长


危险命令6

  • keys
  • flushdb
  • flushall
  • config

放入缓存中的对象,类需要实现序列化

  • java.lang.IllegalArgumentException: 设定缓存的对象:BO无法序列化,确保 implements Serializable

  1. windows下redis安装 ↩︎

  2. redis桌面管理工具 redis-desktop-manager使用指南 ↩︎

  3. Redis笔记二之Redis命令操作简介及五种value数据类型 ↩︎

  4. Redis基本操作——List ↩︎ ↩︎

  5. Redis 的 KEYS 命令引起 RDS 数据库雪崩,宕机 2 次,造成几百万损失 ↩︎

  6. 一个危险 Redis 命令,导致公司损失 400 万!! ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值