认识Redis

张开发
2026/4/17 15:50:42 15 分钟阅读

分享文章

认识Redis
Redis诞生于2009全程是Remote Dictionary Server,远程词典服务器是一个基于内存的键值型NoSQLnot only sql数据库.Redis特征1.键值型value支持多种不同的数据结构功能丰富2.单线程每个命令具备原子性3.低延迟因为是基于内存存储的读写操作效率高4.支持数据持久化5.支持主从集群分片集群6。支持多语言客户端c,java,python...Redis通用命令keys:查看复合模版的所有key*为通配符”_为占位符“,例如查找包含name的keykeys *name*不建议在生产环境设备上使用,因为模糊匹配带来的查询压力以及redis单线程的特性会造成堵塞。del:删除一个指定的key 例如 del key1 key2exists:判断key是否存在 exists key1expire为key设置一个有效期(单位为秒)例如 expire name 20。对于没有给设置有效期的key返回值则为-1即为永久。ttl查看一个key的剩余有效期。String类型String类型字符串类型是redis中最简单的存储类型其value是字符串根据字符串格式的不同可以分为三类string:普通字符串int:整数类型可以做自增自减操作float浮点类型可以做自增自减操作string常见命令set添加或修改一个已经存在的string类型的键值对如set key1 value1get根据set的key来获取value如get key1mset:批量添加如set key1 value1 key2 value2mget:批量获取如get key1 ke2incr:自增1incr key1,则value;incrby:自增并指定步长incrby key2 5,则value5setex:添加一个string类型的键值对并且指定有效期,例如setex key1 10 value1,则有效十秒setnx添加一个string类型的键值对前提是这个key不存在否则不执行例如setnx key1 value1Redis的key的格式为防止id冲突redis的key允许有多个单词形成层级结构多个单词之间用‘:’隔开格式如下[项目名]:[业务名];[类型]:[id]并非固定可以根据实际的业务需求来删除或添加词条。例如我们的项目名称叫 heima有 user 和 product 两种不同类型的数据我们可以这样定义 key◆ user 相关的 key: heima:user:1◆ product 相关的 key: heima:product:1即set heima:user:1 {id:1, name: Jack, age: 21}其会在可视化软件中自动设置层级。Hash 类型Hash 类型也叫散列其 value 是一个无序字典类似于 Java 中的 HashMap 结构。String 结构是将对象序列化为 JSON 字符串后存储当需要修改对象某个字段时很不方便KEYVALUEheima:user:1{name:Jack, age:21}heima:user:2{name:Rose, age:18}Hash 结构可以将对象中的每个字段独立存储可以针对单个字段做 CRUDKEYfieldvalueheima:user:1nameJackage21heima:user:2nameRoseage18Hash 类型的常见命令Hash 的常见命令有HSET key field value添加或者修改 hash 类型 key 的 field 的值HGET key field获取一个 hash 类型 key 的 field 的值HMSET批量添加多个 hash 类型 key 的 field 的值HMGET批量获取多个 hash 类型 key 的 field 的值HGETALL获取一个 hash 类型的 key 中的所有的 field 和 valueHKEYS获取一个 hash 类型的 key 中的所有的 fieldHVALS获取一个 hash 类型的 key 中的所有的 valueHINCRBY让一个 hash 类型 key 的字段值自增并指定步长HSETNX添加一个 hash 类型的 key 的 field 值前提是这个 field 不存在否则不执行List类型的常见命令List 类型List类似java中的的双向链表可对两边进行push和pop操作List 的常见命令LPUSHkey element [...]向列表左侧插入一个或多个元素LPOPkey移除并返回列表左侧的第一个元素没有则返回 nilRPUSHkey element [...]向列表右侧插入一个或多个元素RPOPkey移除并返回列表右侧的第一个元素LRANGEkey start end返回一段角标范围内的所有元素BLPOP和BRPOP与 LPOP 和 RPOP 类似只不过在没有元素时等待指定时间而不是直接返回 null思考1.如何利用list结构模拟一个栈入口和出口在同一边即对一边进行操作即可。2.如何利用list结构模拟一个队列入口出口不在同一边即对两边分别进行push和pop操作。3.如何利用list结构模拟一个阻塞队列入口出口在不同边并在出队时采用BLPOP或者BRPOP。Set类型Redis 的 Set 结构与 Java 中的 HashSet 类似可以看做是一个 value 为 null 的 HashMap。因为也是一个 hash 表因此具备与 HashSet 类似的特征无序元素不可重复查找快支持交集、并集、差集等功能Set 类型的常见命令SADDkey member ...向 set 中添加一个或多个元素SREMkey member ...移除 set 中的指定元素SCARDkey返回 set 中元素的个数SISMEMBERkey member判断一个元素是否存在于 set 中SMEMBERS获取 set 中的所有元素SINTERkey1 key2 ...求 key1 与 key2 的交集SDIFFkey1 key2 ...求 key1 与 key2 的差集SUNIONkey1 key2 ...求 key1 和 key2 的并集SortedSet 类型Redis 的 SortedSet 是一个可排序的 set 集合与 Java 中的 TreeSet 有些类似但底层数据结构却差别很大。SortedSet 中的每一个元素都带有一个 score 属性可以基于 score 属性对元素排序底层的实现是一个跳表SkipList加 hash 表。SortedSet 具备下列特性可排序元素不重复查询速度快因为 SortedSet 的可排序特性经常被用来实现排行榜这样的功能。SortedSet 类型的常见命令SortedSet 的常见命令有ZADDkey score member添加一个或多个元素到 sorted set如果已经存在则更新其 score 值ZREMkey member删除 sorted set 中的一个指定元素ZSCOREkey member获取 sorted set 中的指定元素的 score 值ZRANKkey member获取 sorted set 中的指定元素的排名ZCARDkey获取 sorted set 中的元素个数ZCOUNTkey min max统计 score 值在给定范围内的所有元素的个数ZINCRBYkey increment member让 sorted set 中的指定元素自增步长为指定的 increment 值ZRANGEkey min max按照 score 排序后获取指定排名范围内的元素ZRANGEBYSCOREkey min max按照 score 排序后获取指定 score 范围内的元素ZDIFF、ZINTER、ZUNION求差集、交集、并集SpringDataRedis快速入门其可以在get过程中将对象反序列化其会在写入json的同时写入该对象的class的字节码名称。但与此同时会带来额外的内存空间。因此为了节省内存空间并不会使用json序列化器来处理value而是统一使用string序列化器要求只能存储string类型的key和value当需要存储java对象时手动完成对象的序列化和反序列化如下图所示至此关于redis的基础部分就先搞一段落谢谢大家。

更多文章