当前位置: 首页 > 后端技术 > Java

Redis相关知识点

时间:2023-04-01 23:27:16 Java

redis相关知识点启动代码redis-cli-apassword通用命令expire:设置有效期expire名称10keykey*相关数据类型Stringset:添加或修改一个已有的String的键值对集合typeage19get:根据key获取String类型的值agemset:批量添加String类型的多个键值对msetk1v1k2v2mget:根据多个key获取String类型的多个值mgetk1k2incr:让anintegerkeyauto-increment1incrage19--->20incrby:自增一个整数key并指定步长incrbyage2incrbyage-1incrbyfloat:自增一个浮点数并指定步长incrbyfloatscore0.5setnx:添加一个String类型键值对,前提是key不存在,否则不会执行setnxnameleixinsetex:添加一个String类型的键值对,并指定有效期setexnames10"leixin"Hash类型HSET键字段值:添加或修改hash类型key字段的值hsetleixin:namename"leixin"hsetleixin:namename2"leixin"HGETkeyfield:获取hash类型key字段的值hgetleixin:namename2HMSET:添加批量获取多个hash类型key字段ValueHMGET:批量获取多个hash类型key的字段值HGETALL:获取一个hash类型key中的所有字段和值hgetallleixin:nameHKEYS:获取其中的所有字段ahash-typekeyleixin:nameHVALS:获取一个hash类型key中的所有valuehvalsleixin:nameHINCRBY:让hash类型key的字段值自增并指定步长hincrbyleixin:nameage2HSETNX:添加一个hash类型key的字段值,前提是该字段不存在,否则无法实现List功能。类似于LinkedList:可以重复插入和删除有序元素。查询速度快一般用于存储一个有序的数据,例如:如何在朋友圈中用List结构模拟一个栈,如列表、评论列表等?如何用List结构模拟出入口同侧的队列?入口和出口不在同一侧时,如何使用List结构模拟阻塞队列?入口和出口BLPOP或BRPOPLPUSH关键元素...:在列表左侧插入一个或多个元素lpushusers12345其实就是54321RPUSHkeyelement...:totheleftInsertaoneormoreelementsintherightsideofthelist.rpushusers67此时实际上是5432167。LPOPkeycount:移除并返回列表左侧的count个元素,或者返回nillpopusers3此时removeAndreturn543RPOPkeycount:移除并返回列表右侧的count个元素rpopusers3此时移除并返回761LRANGEkeystarend:返回一个下标范围内的所有元素lrangeusers00this2此时返回BLPOP和BRPOP:类似于LPOP和RPOP,只是它等待指定的没有元素的时候,而不是直接返回nil。如果用100s,结果就出来了1)"users2"2)"1"(34.91s)SetRedis的Set结构类似于Java中的HashSet,可以看成是一个值为null的HashMap。因为也是哈希表,所以和HashSet有相似的特点:无序元素不能重复,快速支持交集、并集、差集等函数。s1abcSREMkeymember...:移除集合srem中的指定元素s1aSCARDkey:返回集合scard中元素的个数s1SISMEMBERkeymember:判断集合sismember中是否存在元素s1bSMEMBERS:获取所有元素在setsmemberss1SINTERkey1key2...:求key1和key2的交集SDIFFkey1key2...:求key1和key2的不同SUNIONkey1key2..:求key1和key2的并集keyscoremember:add一个或多个元素加入到有序集合中,如果已经存在,则更新其分值zaddstudents87jack88jerryZREM关键成员:删除有序集合中的指定元素zremstudentsjackZSCORE关键成员:获取有序集合的分数值指定元素zscorestudentsjerryZRANKkeymember:获取指定元素在排序集合中的排名zrankstudentsjerry排名从0开始ZCARDkey:获取排序集合中元素的个数zcardstudentsZCOUNTkeyminmax:统计分值的给定范围内所有元素的个数ZINCRBYkeyincrementmember:对有序集合中的指定元素进行自增,步长为指定的增量值ZRANGEkeyminmax:按分数排序后,得到指定排序范围内的元素ZRANGEBYSCOREkeyminmax:按分数排序后,得到指定分数范围内的元素ZDIFF、ZINTER、ZUNION:求差、交集、并集注:所有排名默认为升序排列。稍后添加REVSpringDataRedisAPI返回值类型说明redisTemplate.opsForValue()ValueOperations操作String类型数据redisTemplate.opsForHash()HashOperations操作Hash类型数据redisTemplate.opsForList()ListOperations操作List类型数据redisTemplate.opsForSet()SetOperations操作SettypedataredisTemplate.opsForZSet()ZSetOperationsoperationSortedSettypedataredisTemplatecommoncommandquickstart导入依赖org.apache.commonscommons-pool2com.fasterxml.jackson.corejackson-databind配置文件spring:redis:host:192.168.122.120port:6379password:73883672jedis:pool:max-active:8max-idle:0max-wait:100ms用于测试@AutowiredprivateRedisTemplateredisTemplate;@TestvoidtestString(){//写一个String数据redisTemplate.opsForValue().set(“姓名”,“谷歌”);//获取字符串数据Objectname=redisTemplate.opsForValue().get("name");System.out.println(名字);}这时候你会发现redis数据库只有一些转码,这时候我们需要手动序列化@ConfigurationpublicclassRedisConfig{@BeanpublicRedisTemplateredisTemplate(RedisConnectionFactoryconnectionFactory){//创建一个RedisTemplate对象RedisTemplatetemplate=newRedisTemplate<>();//设置连接工厂template.setConnectionFactory(connectionFactory);//创建JSON序列化工具GenericJackson2JsonRedisSerializerjsonRedisSerializer=newGenericJackson2JsonRedisSerializer();//设置Key序列化template.setKeySerializer(RedisSerializer.string());template.setHashKeySerializer(RedisSerializer.string());//设置Value的序列化template.setValueSerializer(jsonRedisSerializer);template.setHashValueSerializer(jsonRedisSerializer);//返回返回模板;}}这时候测试注入对象@TestvoidtestSaveUser(){//User有两个参数,一个是name,一个是ageredisTemplate.opsForValue().set("user:100",newUser("磊鑫",20));Usero=(User)redisTemplate.opsForValue().get("user:100");System.out.println("o="+o);}这时候指定了很多A类的参数,数据量大,很浪费空间{"@class":"com.leixin.pojo.User","name":"leixin","age":20}简单优化使用StringRedisTemplate写入Redis时,读取Redis时手动将对象序列化成JSON,手动将读取的JSON反序列化为一个对象@AutowiredprivateStringRedisTemplatestringRedisTemplate;@TestvoidtestString(){stringRedisTemplate.opsForValue().set("name","leixin");字符串名称=stringRedisTemplate.opsForValue().get("名称");System.out.println(name);}privatestaticfinalObjectMappermapper=newObjectMapper();@TestvoidtestSaveUser()throwsJsonProcessingException{//创建对象Useruser=newUser("胡哥",21);//手动序列化Stringjson=mapper.writeValueAsString(user);//写入数据stringRedisTemplate.opsForValue().set("user:200",json);//获取数据StringjsonUser=stringRedisTemplate.opsForValue().get("user:200");//手动反序列化用户user1=mapper.readValue(jsonUser,User.class);System.out.println("用户1="+用户1);}@TestvoidtestHash(){stringRedisTemplate.opsForHash().put("user:400","name","虎哥");stringRedisTemplate.opsForHash().put("user:400","age","21");Mapentries=stringRedisTemplate.opsForHash().entries("user:400");System.out.println("条目="+条目);}