600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Redis五大基本数据类型及其相关命令及常用用途

Redis五大基本数据类型及其相关命令及常用用途

时间:2023-10-29 01:24:25

相关推荐

Redis五大基本数据类型及其相关命令及常用用途

String

String类型,可以用来存储字符串、整型、浮点型数据、甚至二进制数据(因为redis的String类型是二进制安全的)。

常用命令:

#设置多个值,原子性。mset aaa 2673 bbb 666#如果key存在,就设置不成功,分布式锁的原理。setnx qingshan #Ex 秒数 或者 PX 毫秒数 设置过期时间#NX(存在不设置)/XX (存在也设置)set key value [expiration EX seconds|PX milliseconds][NX|XX]#该key自增1incr key#该key自增100incrby key 100#递减1decr key#自减100decrby key 100set f 2.6#浮点数+7.3incrbyfloat f 7.31#获取多个key的值mget a b#获取该key值的长度strlen key#往该key后面追加字符串。append a good#获取key的值的 指定下标范围的字符串getrange key 0 8

用途:

缓存:热点数据的缓存,比如对象缓存、文本缓存等,可以提升访问的速度。数据共享:比如共享配置、分布式session等。分布式锁。全局ID,可以在分库分表的情况下,incrby userid 1000 一次性拿一段id使用。计数器,文章阅读数、网站访问量、秒杀库存计数等。简单的限流,比如某个接口10秒内只能访问1000次,就设置一个过期时间为10秒的key,然后每访问一次就加一,超过1000次后,就拒绝访问。

hash类型

field,value都只能是字符串,不能存储其他类型。

常用命令:

#设置 key h1 field f value 6hset h1 f 6hset h1 e 5#批量设置hmset h1 a 1 b 2 c 3 d 4#获取key为h1 field为 a的值hget h1 a#批量获取hmget h1 a b c d#获取key为h1 的所有fieldhkeys h1#获取key为h1的所有valuehvals h1#获取key h1的所有field valuehgetall h1#判断key h1 field 为a 存不存在hget exists h1 a#删除key 为h1 field为ahdel h1 a#判断key的元素个数hlen h1

哈希和String类型的主要区别:

哈希的优势:

把所有相关的值聚集到一个 key 中,节省内存空间。只使用一个 key,减少 key 冲突。当需要批量获取值的时候,只需要使用一个命令,减少内存/IO/CPU 的消耗

哈希的劣势:

Field 不能单独设置过期时间

用途:

String 可以做的事情,Hash 都可以做,只是两个之间的适用度问题。

List类型

是一个双端队列。

相关命令对应的数据情况:

#获取左边开始第一个元素。lindex queue 0#从左到右获取所有元素lrange queue 0 -1

用途:

因为 List 是有序的,可以用来做用户时间线,比如博客系统,每新增一遍博客,就以用户为key,lpush一条数据,然后获取时,也是lrange key 0 -1 就可以按时间顺序从新到旧展示博客。可以当分布式队列、栈使用。

Set类型

String 类型的无序集合,最大存储数量 2^32-1(40 亿左右),元素不能重复,类比java的hashset。

常用命令:

#设置并添加多个元素sadd myset a b c d e f g#获取所有元素smembers myset#获取元素个数scard myset#随机获取其中一个元素srandmember key#随机弹出一个元素/删除spop myset#删除多个元素srem myset d e f#查看元素是否存在sismember myset a#差集sdiff set1 set2#交集sinter set1 set2#并集sunion set1 set2

应用场景:

抽奖:spop myset,随机弹出一个元素。比如记录一篇文章的点赞的所有用户。

b001是文章的id,like:b001组成key。u001 、u002是用户id

sadd like:b001 u001 u002

用户u003点赞

sadd like:b001 u003

用户u002取消点赞:

srem like:b001 u002

用户是否点赞u003:

sismember like:b001 u003

点赞的所有用户:

smembers like:b001

点赞数:

scard like:b001

用户关注、 推荐模型等。

ZSet 有序集合

每个元素由元素值和分数组成。

score 相同时,按照 key 的 ASCII 码排序。

常用命令:

#添加元素zadd myzset 10 java 20 php 30 ruby 40 cpp 50 python#正序获取所有元素zrange myzset 0 -1 withscores#反序获取所有有序zrevrange myzset 0 -1 withscores#获取20分-30分的元素zrangebyscore myzset 20 30#删除元素zrem myzset php cpp#统计元素个数zcard myzset#给元素5分。zincrby myzset 5 python#获取20分至60分的元素zcount myzset 20 60#获取某个元素的排名zrank myzset java#获取某个元素的分数zsocre myzset java

常用场景:

排行榜,比如获取50个热搜,按照访问量从高到低排序。

zrevrange myzset 0 50 withscores

如果访问了一次,就加一分,zincrby myzset 1 python 。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。