Redis
Redis 教程
Redis中key键与value类型的相关操作
Redis排障命令
Redis哨兵集群运维指令
本文档使用 MrDoc 发布
-
+
home page
Redis中key键与value类型的相关操作
1、键key的相关操作(redis建议使用字符串做为key的类型) get key 查看某一个key的值 exists key 检查给定key是否存在。注意事项,不支持通配符 del key 删除一个key del key1 key2 key3 删除多个key keys pattern (模糊查找) 查找所有符合给定模式 pattern 的 key keys * 匹配数据库中所有 key keys n?me 匹配 name、neme、nfme 等 keys n* 匹配 name、neme、naaaaame等 keys n[ae]me 只能匹配 name、neme expire key seconds 指定key的过期时间 新添加的key,如果没有指定过期时间,则会一直保存。 可以对一个已经带有生存时间的key执行EXPIRE命令,新指定的生存时间会取代旧的生存时间。 ttl key (time to live) 查看某个key的剩余过期时间,返回值: -2 表示这个key已经过期,删除掉 -1 表示没有设置过期时间 其它 表示剩余的生存时间,单位为秒。 rename 语法格式:rename key newkey 将 key 改名为 newkey 。当 key 和 newkey 相同,或者 key 不存在时,返回一个错误。当 newkey 已经存在时, RENAME 命令将覆盖旧值。 type key 查看key对应的value的数据结构类型。其它key命令见redis帮助文档 http://doc.redisfans.com/ 2、value的类型及相关操作 Redis的数据结构类型,指的就是redis的值value的类型; Redis常用的数据结构类型:string、list、hash、set、sortedSet (1)string类型 相关命令 set key value ----设置一个key,值为value,类型为String类型 setnx key value ----如果这个key不存在,则设置一个key,值为value;如果key存在,则不做更新。 get key ----获取key对应的value值;如果key不存在,则返回nil mget key1 key2 key3 ---- 一次获取多个key的值,如果对应key不存在,则对应返回nil。 incr key ----将 key 中储存的数字值增一,然后返回。 如果这个key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。 如果这个key对应的value值,不能表示数字,则会返回一个错误。 incrby key increment ---- 将key增加指定的步长值。 decr key ---- 将 key 中储存的数字值减一,然后返回。 如果这个key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。 如果这个key对应的value值,不能表示数字,则会返回一个错误。 Redis的key是单线程模式,这就意味一瞬间只有一个线程能够持有这个key,所以可以使用redis解决部分涉及线程安全的业务。比如,在初级时候通过多线程模拟卖票,使用加锁的方式,保证只有一个线程能够持有锁,进行买票业务。 decrby key decrement ---- 将key减少对应的步长值。 append key value ---- 如果key已经存在,则将value追加到这个key原先的value值的末尾。 如果这个key不存在,则执行set操作。 127.0.0.1:6379> help @string 查看string类型的帮助文档 应用场景 (1)、做与统计有关的业务,如新浪微博(微信朋友圈)中的点赞功能 (2)解决多线程的线程安全问题。 Redis的key是单线程模式,这就意味一瞬间只有一个线程能够持有这个key,所以可以使用redis解决部分涉及线程安全的业务,比如说抢购、秒杀。再比如初级的时候学习多线程模拟买票窗口的卖票业务。 (2)List类型 特点 (1)、基于Linked List实现 (2)、元素是字符串类型 (3)、列表头尾增删快,中间增删慢,增删元素是常态 (4)、元素可以重复出现 (5)、最多包含2^32-1元素 相关命令 lpush key value [value ...] ---- 将一个或多个值从左边插入列表key的表头; 比如说,对空列表mylist执行命令LPUSH mylist a b c,列表的值将是 c b a ;如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。当 key 存在但不是列表类型时,返回一个错误。 rpush key value [value ...] ---- 尾部添加(从右向左),操作同上。 llen key ---- 返回key对应list的长度,key不存在返回0,如果key对应类型不是list返回错误 lindex key index ---- index元素在list列表中的下角标,从0开始;lindex是从左到右取元素 lrange key start stop ---- 获取指定区间的所有元素;下角标从0开始,0表示第一个元素,1表示第二个,依次类推;-1表示最后一个元素,-2表示倒数第二个元素,依次类推; lpop key ---- 移除并返回列表中的第一个元素 rpop key ---- 移除并返回列表中的最后一个元素 应用场景 (1)处理排名类业务。如新浪微博评论、论坛回帖楼层等。 (2)聊天室 (3)Hash类型 特点 (1)由Field和与之关联的value组成map键值对 (2)field和value是字符串类型; (3)一个hash中最多包含2^32-1键值对。 相关命令 hset key field value ---- 设置hash field为指定值 如果key不存在,则先创建 如果key已经存在,那么将更新这个key的值。 hget key field ---- 获取指定的hash field hmget key filed1....fieldN ---- 获取全部指定的hash filed hmset key filed1 value1 ... filedN valueN ---- 同时设置hash的多个field hexists key field ---- 测试指定field是否存在 hdel key field ---- 删除指定的hash field hlen key ---- 返回指定hash的field数量 hkeys key ---- 返回hash的所有field hvals key ---- 返回hash的所有value hgetall ---- 返回hash的所有filed和value 节约内存空间: redis每创建一个键,都会为这个键储存一些附加的管理信息(比如这个键的类型,这个键最后一次被访问的时间等等) redis的key相对于值来说,更珍贵!!! 所以数据库里面的键越多,redis数据库服务器在储存附加管理信息方面耗费的内存就越多,在获取key对应的value值时cpu的开销也会更多 Hash结构可以将具有关联关系的一组key-value,存储到同一个hash结构中,从而减少key的数量。 如果我们仅仅只对一个字段设置过期,就不建议使用hash。 Redis的key的过期功能只能对键操作,而Hash结构不能单独对某一个filed设置过期功能。 说明:在实际开发中,能使用hash的时候,尽量使用hash!! (4)Set类型 特点 (1)无序的、去重的; (2)元素是字符串类型; (3)最多包含2^32-1元素。 相关命令 sadd key member [member ...](无序不重复) 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。假如 key 不存在,则创建一个只包含 member 元素作成员的集 合。 当 key 不是集合类型时,返回一个错误。 smembers key ---- 返回集合 key 中的所有成员。不存在的 key 被视为空集合。 spop key ---- 移除并返回集合中的一个随机元素。 被移除的是随机元素。 当key不存在或key是空集时,返回nil。 scard key ---- 返回集合key的基数(集合中元素的数量)。 集合的基数。当key不存在时,返回0。 交集、并集、差集sinter sunion sdiff sinter key [key ...] ---- 返回一个集合的全部成员,该集合是所有给定集合的交集。不存在的 key 被视为空集。 sunion key [key ...] ---- 返回一个集合的全部成员,该集合是所有给定集合的并集。不存在的 key 被视为空集。 sdiff key [key ...] ---- 返回一个集合的全部成员,该集合是所有给定集合之间的差集。不存在的 key 被视为空集。 应用场景 (1)新浪微博的共同关注 需求:当用户访问另一个用户的时候,会显示出两个用户共同关注哪些相同的用户 设计:将每个用户关注的用户放在集合中,求交集即可 实现如下: peter={'john','jack','may'} ben={'john','jack','tom'} 那么peter和ben的共同关注为: SINTER peter ben 结果为{'john','jack'} (5)SortSet类型 特点 (1)类似Set集合; (2)有序的、去重的; (3)元素是字符串类型; (4)每一个元素都关联着一个浮点数分值(Score),并按照分值从小到大的顺序排列集合中的元素。分值可以相同 (5)最多包含2^32-1元素 相关命令 zadd key [sort member sort member] ---- 增加值 如: zadd set1 1 zhangsan 2 lisi zrange key start end ---- 查询只定范围的值 如: zrange set1 0 10 zcount key start end ---- 统计一个范围内元素的个数 如: zcount set1 0 10 zcard key ---- 统计元素的个数 如 : zcard set1 zrank key ---- 返回成员的索引号 如: zrank set1 zrem key [member member] ---- 删除成员 如: zrem set1 zhangsan 应用场景 适用于需要有序且唯一的业务或操作: (1)网易音乐排行榜 分析: 每首歌的歌名作为元素(唯一、不重复) 每首歌的播放次数作为分值 ZREVRANGE来获取播放次数最多的歌曲(就是最多播放榜了,云音乐热歌榜,没有竞价,没有权重) https://zhuanlan.zhihu.com/p/73711555
Nathan
July 14, 2023, 7:54 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password