
一、简介Redis是一个基于内存的key-value结构数据库Redis教程基于内存存储读写性能高适合存储热点数据如热点商品、资讯、新闻等官网前往中文网站前往Redis安装包分为Windows版和Linux版Windows版下载快速下载通道Linux版下载快速下载通道二、下载与安装Redis的windows版属于绿色软件直接解压即可使用解压目录结构如下进入到解压目录内在顶部文件路径输入cmd进入cmd终端页面输入启动服务命令redis-server.exe redis.windows.conf如果你想在 IDEA Shell Script 配置里面写启动命令.\redis-server.exe redis.windows.conf继续在解压目录下新开一个cmd终端窗口输入启动客户端连接命令redis-cli.exe, 然后输入keys * ;进行查看就成功了也可以通过命令连接指定地址和端口的redis服务//例如连接本地的redis服务 redis-cli.exe-h localhost-p6379三、设置Redis服务的密码redis默认是没有密码的可以通过修改【redis.windows.conf】配置文件进行密码设置打开redis.windows.conf配置文件全局搜索requirepass foobared去掉【#requirepass foobared】的#将foobared 修改为你需要设置的密码【例如123456】保存文件重新启动服务修改后退出服务命令exit 或 按键ctrlc重启服务后再连接进行操作就报错【需要NOAUTH身份验证】可以通过命令进行快速认证连接redis-cli.exe-h localhost-p6379-a123456就可以重新进行操作了以上命令用法可以当做练手学习四、Redis图形软件的使用安装redis的图形界面软件【Another Redis Desktop Manger】下载地址Another Redis Desktop Manger下载完成后双击运行安装就可以了进入到图形软件点击【新建连接】进行连接设置设置完成点击确定就完成连接了五、Redis数据类型5种常用数据类型Redis存储的是key-value结构的数据其中key是字符串类型value有5种常用的数据类型字符串 string哈希 hash列表 list集合 set有序集合 sorted set / zset各种数据类型的特点字符串 string最基础、常用的类型可存储字符串、整数或浮点数常用于缓存、计数器、分布式锁等场景哈希 hash也叫散列类似于java中的HashMap结构适合存储对象如用户信息、商品详情可对单个字段进行读写列表 list按插入顺序存储支持两端操作可以有重复元素类似于java中的LinkedList适合消息队列、最新动态列表集合 set元素唯一且无序类似于java中的HashSet适合去重、共同好友、标签等场景有序集合 zset元素唯一集合中每个元素关联一个分数score根据分数进行升序排序适合排行榜、延时队列等场景。数据类型选型建议需要缓存热点数据、简单计数 → 优先考虑 string需要存储结构化对象并频繁更新部分字段 → 优先考虑 hash需要按时间顺序存取、实现队列 → 优先考虑 list需要去重、求交集并集 → 优先考虑 set需要按分数排序、做排行榜 → 优先考虑 zset。六、Redis常用命令键操作命令命令示例说明SETSET name zhangsan设置指定 key 的值若 key 已存在则覆盖GETGET name获取指定 key 的值不存在时返回(nil)DELDEL name删除一个或多个 key返回被删除的数量KEYSKEYS pattern如KEYS * 或者KEYS user*查找所有符合给定模式pattern的keyEXISTSEXISTS name判断 key 是否存在存在返回 1不存在返回 0TYPETYPE name检查数据类型返回对应的数据类型EXPIREEXPIRE name 60设置 key 的过期时间单位秒到期后自动删除字符串命令命令示例说明INCRINCR count将 key 中存储的数字值加 1常用于计数器、浏览量统计DECRDECR count将 key 中存储的数字值减 1APPENDAPPEND msg world将字符串追加到 key 原有值的末尾返回追加后的总长度哈希命令命令示例说明HSETHSET user:1 name zhangsan设置哈希表中指定字段的值字段不存在则新建HGETHGET user:1 name获取哈希表中指定字段的值HDELHDEL user:1 name删除哈希表中的一个或多个字段HKEYSHKEYS user:1获取哈希表中所有字段HVALSHVALS user:1获取哈希表中所有值列表命令命令示例说明LPUSHLPUSH list a b c从列表左侧头部插入一个或多个元素RPUSHRPUSH list x y从列表右侧尾部插入一个或多个元素LRANGELRANGE list [开始位置如0] [结束位置如-1]获取列表指定范围内的元素-1代表整个列表的最后位置LLENLLEN list获取列表长度LPOPLPOP list移除并返回列表左侧头部的第一个元素RPOPRPOP list移除并返回列表右侧尾部的最后一个元素集合命令命令示例说明SADDSADD gather a b c向集合中添加一个或多个元素重复元素会被忽略SMEMBERSSMEMBERS gather返回集合中的所有元素SCARDSCARD gather获取集合的成员数SINTERSINTER gather1 gather2返回给定所有集合的交集SUNIONSUNION gather1 gather2返回给定所有集合的并集SREMSREM gather a从集合中移除一个或多个元素有序集合命令命令示例说明ZADDZADD zset 90 zhangsan向有序集合中添加元素并指定分数score用于排行榜等场景ZRANGEZRANGE zset 0 -1 [WITHSCORES]按分数升序返回指定范围内的元素withscores为可选输入如输入会把分数一起返回ZINCRBYZINCRBY zset increment zhangsan有序集合中对指定成员的分数加上增量 incrementZSCOREZSCORE zset zhangsan获取有序集合中指定元素的分数ZREMZREM zset zhangsan移除有序集合中的一个或者多个元素通用命令命令示例说明SELECTSELECT 1切换到指定的数据库Redis 默认有 16 个库编号 0-15DBSIZEDBSIZE返回当前数据库中 key 的总数量FLUSHDBFLUSHDB清空当前数据库中的所有 key操作前请谨慎确认以上命令可通过图形操作软件进行测试七、在java中操作Redis前面我们学习了 Redis 的命令行操作接下来看看如何在 Java 项目中操作 Redis。本章将介绍常用的 Java 客户端以及 Spring Data Redis 的使用方式帮助你把 Redis 集成到实际项目中。1. Redis的java客户端常用的 Java 客户端有以下三种Jedis轻量、简洁是 Redis 官方推荐的 Java 客户端API 直观适合中小型项目Lettuce基于 Netty 实现支持同步、异步和响应式编程性能优秀是 Spring Boot 2.x 默认的客户端Redisson功能最丰富提供了分布式锁、分布式集合等高级特性适合复杂分布式场景。选型建议如果是 Spring Boot 项目直接使用默认的 Lettuce 即可如果只是简单的工具类或非 Spring 项目可以选择 Jedis。下面以 Jedis 为例演示在 Java 中操作 Redis!-- Maven 依赖 --dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion4.4.3/version/dependencyimportredis.clients.jedis.Jedis;publicclassJedisDemo{publicstaticvoidmain(String[]args){// 1. 建立连接默认端口 6379JedisjedisnewJedis(localhost,6379);// 2. 如果设置了密码需要认证// jedis.auth(123456);// 3. 执行操作jedis.set(name,zhangsan);Stringnamejedis.get(name);System.out.println(name name);// 4. 关闭连接jedis.close();}}2. Spring Data Redis使用方式Spring Data Redis 是对 Jedis/Lettuce 的进一步封装提供了RedisTemplate和StringRedisTemplate等模板类让我们可以用更简洁的代码操作 Redis。第一步引入依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency第二步配置连接信息# application.ymlspring:redis:host:localhostport:6379password:123456# 如果设置了密码则填写没有则删除此行database:0第三步编写配置类设置序列化器importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;importorg.springframework.data.redis.serializer.StringRedisSerializer;ConfigurationpublicclassRedisConfig{BeanpublicRedisTemplateString,ObjectredisTemplate(RedisConnectionFactoryfactory){RedisTemplateString,ObjecttemplatenewRedisTemplate();template.setConnectionFactory(factory);// key 使用字符串序列化器template.setKeySerializer(newStringRedisSerializer());// value 使用 JSON 序列化器template.setValueSerializer(newGenericJackson2JsonRedisSerializer());// hash 的 key 和 value 也使用同样的序列化器template.setHashKeySerializer(newStringRedisSerializer());template.setHashValueSerializer(newGenericJackson2JsonRedisSerializer());template.afterPropertiesSet();returntemplate;}}第四步在业务代码中使用importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.stereotype.Service;ServicepublicclassUserService{AutowiredprivateRedisTemplateString,ObjectredisTemplate;// 缓存用户信息使用 hash 类型publicvoidcacheUser(StringuserId,Stringname){Stringkeyuser:userId;redisTemplate.opsForHash().put(key,name,name);redisTemplate.opsForHash().put(key,age,25);}// 读取缓存publicObjectgetUserName(StringuserId){Stringkeyuser:userId;returnredisTemplate.opsForHash().get(key,name);}// 浏览量计数器使用 string 类型publicvoidincrementViewCount(StringarticleId){Stringkeyview:count:articleId;redisTemplate.opsForValue().increment(key);}}小结通过 Spring Data Redis我们可以用面向对象的方式操作 Redis无需关心底层连接管理。实际项目中Redis 常用于缓存热点数据、分布式锁、计数器、消息队列等场景建议结合前面学过的数据类型在项目中多加练习。