ASMR下载管理终极指南:3大核心功能助你轻松构建个人ASMR音频库
2026/5/15 11:35:04
redis是一个key-value。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set–有序集合)和hash(哈希类型)。
Redis 内置了复制(replication),LUA脚本(Luascripting),LRU驱动事件(LRU eviction),事务(transactions)和不同级别的 磁盘持久化(persistence),并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。
在解压后的目录下cmd,直接输入命令redis-server.exe redis.windows.conf,即可启动redis
新建记事本文件startup.bat, 输入redis-server.exe redis.windows.conf
redis.windows.conf文件中requirepass 下添加requirepass 密码,保存,重新运行即可引入相关JAR
<!--redis jar--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>在application.yml文件中添加相关配置
spring:redis:# Redis服务器地址host:127.0.0.1# Redis数据库端口(默认为6379)port:6379# Redis服务器连接密码(默认为空)password:123456# Redis数据库索引(默认为0)database:1完成后,SpringBoot自动在Spring容器中配置一个redisTemplate的Bean,所以可以直接使用redisTemplate
常用方法
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
@AutowiredprivateRedisTemplateredisTemplate;// 创建opsForValue对象ValueOperationsvalueOperations=redisTemplate.opsForValue();valueOperations.set("name","lisi");System.out.println(redisTemplate.opsForValue().get("name"));输出结果:lisi//设置有效期 10秒后过期valueOperations.set("name","amy",10000,TimeUnit.MILLISECONDS);// 设置10秒后过期 10秒后,输出nullSystem.out.println(redisTemplate.opsForValue().get("name"));//自增 count=1valueOperations.increment("count",1);//自增 count=2valueOperations.increment("count",1);//输出count=2System.out.println(valueOperations.get("count"));// 追加字符串 name=lisiiii 如果name不存在则创建空字符串 因此APPEND在这种特殊情况下将类似于SETvalueOperations.append("name","iii");// 获取字符串的子串 0-2 包含0不包含2System.out.println(valueOperations.get("name",0,2));System.out.println(valueOperations.size("name"));RedisSerializerrs=newStringRedisSerializer();redisTemplate.setStringSerializer(rs);Billbill=newBill();bill.setProductName("iphone");bill.setProductDesc("手机");bill.setProductUnit("个");//存储对象 bill 到 redis 中valueOperations.set("bill",bill);//获取对象Billbill1=(Bill)valueOperations.get("bill");;System.out.println(bill1);输出结果:Bill(id=null,billCode=null,productName=iphone,productDesc=手机,productUnit=个,productCount=null,totalPrice=null,isPayment=null,providerId=null,provider=null)//添加数据到list的头部listOperations.leftPush("names","苏暮雨");listOperations.leftPush("names","苏昌河");listOperations.leftPush("names","苏喆");//[苏喆, 苏昌河, 苏暮雨]//添加数据到list的尾部listOperations.rightPush("names","白鹤淮");listOperations.rightPush("names","唐怜月");listOperations.rightPush("names","唐莲");//获取list的所有元素System.out.println(listOperations.range("names",0,-1));//输出结果:[苏喆, 苏昌河, 苏暮雨, 白鹤淮, 唐怜月, 唐莲]System.out.println(listOperations.size("names")); //输出结果:6//修改list的第4个元素(索引从0开始) listOperations.set("names",3,"雷云鹤"); System.out.println(listOperations.range("names",0,-1)); 输出结果:[苏喆, 苏昌河, 苏暮雨, 雷云鹤, 唐怜月, 唐莲]//批量将一个数组插入到列表中String[]nameStr={"萧瑟","无心","苏雨墨"};listOperations.leftPushAll("names",nameStr);System.out.println(listOperations.range("names",0,-1));输出结果:[苏雨墨,无心,萧瑟,苏喆,苏昌河,苏暮雨,雷云鹤,唐怜月,唐莲,白鹤淮,唐怜月,唐莲]//删除从索引开始,遇到第一个匹配的元素,删除它listOperations.remove("names",1,"唐莲");//删除从尾部开始,遇到第一个匹配的元素,删除它listOperations.remove("names",-1,"白鹤淮");//删除所有value=唐怜月的的元素listOperations.remove("names",0,"唐怜月");//获取list的第3个元素(索引从0开始) System.out.println(listOperations.index("names",2));@AutowiredprivateRedisTemplateredisTemplate;@TestpublicvoidtestRedisTemplate(){ZSetOperationszSetOperations=redisTemplate.opsForZSet();}zSetOperations.add("zset1","zhangsan",100);zSetOperations.add("zset1","lisi",88);zSetOperations.add("zset1","wangwu",99);//从有序集合中移除一个或者多个元素zSetOperations.remove("zset1","lisi");//获取有序集合的所有元素System.out.println(zSetOperations.range("zset1",0,-1));输出结果:[wangwu,zhangsan]//增加有序集合的元素的分数zSetOperations.incrementScore("zset1","lisi",1);//获取有序集合的元素的分数System.out.println(zSetOperations.score("zset1","lisi"));输出结果:89//获取有序集合的元素在有序集合中范围(包含)的索引System.out.println(zSetOperations.rangeByScore("zset1",88,100));//获取有序集合的元素在有序集合中的数量System.out.println(zSetOperations.count("zset1",88,100));输出结果:[lisi,wangwu,zhangsan]3//获取有序集合的成员数System.out.println(zSetOperations.size("zset1"));//3@AutowiredprivateRedisTemplateredisTemplate;@TestpublicvoidtestRedisTemplate(){//创建opsForSet对象SetOperationssetOperations=redisTemplate.opsForSet();}//添加数据String[]strArrays=newString[]{"set1","set2","set3","set4"};//将元素添加到集合中setOperations.add("setTest",strArrays);//获取集合中的元素System.out.println(setOperations.members("setTest"));//获取集合中的元素System.out.println(setOperations.members("setTest"));//删除数据setOperations.remove("setTest","set1");System.out.println(setOperations.members("setTest"));输出结果:[set4,set3,set1,set2][set4,set3,set2]//获取集合的长度System.out.println(setOperations.size("setTest"));输出结果:3//判断元素是否在集合中System.out.println(setOperations.isMember("setTest","set2"));输出结果:true@AutowiredprivateRedisTemplateredisTemplate;@TestpublicvoidtestRedisTemplate(){//创建opsForHash对象HashOperationshashOperations=redisTemplate.opsForHash();}//使用opsForHash对象操作哈希结构 添加数据hashOperations.put("users","name1","zhangsan");hashOperations.put("users","name2","lisi");hashOperations.put("users","name3","wangwu");//使用opsForHash对象操作哈希结构 删除数据hashOperations.delete("users","name1");//使用opsForHash对象操作哈希结构 获取数据System.out.println(hashOperations.get("users","name2"));//使用opsForHash对象操作哈希结构 批量添加数据MapnewMap=newHashMap();newMap.put("map3","map3-3");newMap.put("map5","map5-5");hashOperations.putAll("users",newMap);@AutowiredprivateStringRedisTemplatestringRedisTemplate;@TestpublicvoidtestRedisTemplate(){//设置有效期 10分钟后过期stringRedisTemplate.opsForValue().set("test","909",600000,TimeUnit.MILLISECONDS);//60秒后,输出nullSystem.out.println(stringRedisTemplate.opsForValue().get("test"));//909//获得键test的剩余有效期 单位:秒System.out.println(stringRedisTemplate.getExpire("test"));//600//删除键teststringRedisTemplate.delete("test");//向指定key中存放set集合stringRedisTemplate.opsForSet().add("setTest","1","2","3");//获取集合setTest的所有元素System.out.println(stringRedisTemplate.opsForSet().members("setTest"));//[1, 2, 3]//判断元素是否在Set集合中System.out.println(stringRedisTemplate.opsForSet().isMember("setTest","1"));//true//获取集合的长度System.out.println(stringRedisTemplate.opsForSet().size("setTest"));//3//添加数据到hash结构中stringRedisTemplate.opsForHash().put("hashTest","name1","lisi");stringRedisTemplate.opsForHash().put("hashTest","name2","wangwu");stringRedisTemplate.opsForHash().put("hashTest","name3","zhangsan");//判断hash结构中是否存在指定的keySystem.out.println(stringRedisTemplate.hasKey("hashTest"));//true}