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自增1
incr key
#该key自增100
incrby key 100
#递减1
decr key
#自减100
decrby key 100
set f 2.6
#浮点数+7.3
incrbyfloat 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 6
hset h1 f 6
hset 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 的所有field
hkeys h1
#获取key为h1的所有value
hvals h1
#获取key h1的所有field value
hgetall h1
#判断key h1 field 为a 存不存在
hget exists h1 a
#删除key 为h1 field为a
hdel 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 。
本文详细介绍了 Redis 中五种主要的数据类型:String、Hash、List、Set 和 ZSet 的特性和应用场景,包括缓存、计数器、分布式锁、用户时间线、排行榜等功能。
888

被折叠的 条评论
为什么被折叠?



