Redis的5中数据类型


1、字符串(String)

Redis字符串可以是:简单字符串、复杂字符串(json、html、xml等)、数字(整型、浮点型)、也可以是二进制(图片、音频、视频)等。
但是最大不能超过512M。

常用命令:

//添加元素
set key value
//获取元素
get key
//修改元素,并返回旧元素
getset key value

//批量设置值
mset key1 value1 [key2 value2 ......]
//批量获取值
mget key1 [key2 key3 ......]

//获取字符串长度
setlen key

//将key中数值加1(数字类型)
incr key
//将key中整数数值加上增量increment
incrby key increment
//将key中浮点数值加上增量increment
incrbyfloat key increment

//将key中数值减去1
decr key
//将key中数值减去增量increment
decrby key increment

//追加内容
append key value

//设置指定位置的字符
setrange key index value
//获取部分字符串内容
getrange key startIndex endIndex

使用场景:
1、计数(点赞、播放量等)
2、限流
3、缓存


2、哈希(Hash – Map)

Redis hash 是一个 string 类型的 field 和 value的映射表,键值本身又是一个 键值对 结构,value={{field1,value1},…{fieldN,valueN}},hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。

常用命令:

//设置值
hset key field value
//获取值
hget key field
//查看字段是否存在
hexists key field
//删除一个或多个字段
hdel key field1 [field2 field3 ...... ]

//获取所有field
hkeys key
//获取所有value
hvals key
//获取所有field-value
hgetall key

//批量设置field-value
hmset key field1 value1 [field2 value2 ......]
//获取给定字段的值
hmget key field1 [field2 ......]

//计算field的个数
hlen key
//就散value的长度
hstrlen key field

//为field中整数数值加上增量increment
hincrby key field increment
//为field中浮点数值加上增量increment
hincrbyfloat key field increment

使用场景:
存储一些结构化数据,比如用户数据(姓名、性别、年龄…)


3、列表(List)

Redis列表是 简单的 字符串列表,按照插入顺序排序。用来存储多个 有序 的字符串,列表中的每个字符串称为元素(element),你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
一个列表最多可以存储2^32 -1个元素 (4294967295, 每个列表超过40亿个元素)。

常用命令:

//从列表头部插入一个或多个元素
lpush key value1 [value2 ......]
//从列表尾部插入一个或多个元素
rpush key value1 [value2 ......]
//向某个元素前或后插入元素
linsert key before|after pivot value 
//将一个值插入到已存在的列表头部
lpushx key value
//将一个值插入到已存在的列表尾部
rpush key value

//移除并返回列表的第一个元素(从列表头部弹出元素)
lpop key
//移除并返回列表的最后一个元素(从列表尾部弹出)
rpop key
//移出并获取列表的第一个元素,如果列表没有元素,会阻塞列表直到等待超时或发现可弹出元素为止。
blpop key1 [key2 ...] timeout
//移出并获取列表的最后一个元素, 如果列表没有元素,会阻塞列表直到等待超时或发现可弹出元素为止。
brpop key1 [key2 ...] timeout

//获取列表长度
llen key
//获取指定索引下标的元素
lindex key index
//获取指定范围内的元素列表
lrange key startIndex endIndex

//删除指定元素:count>0,从表头开始向表尾搜索,移除与value相等的元素,数量为count;count<0,从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值;count=0,移除表中所有与value相等的值。
lrem key count value
//对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
ltrim key stratIndex endIndex

//修改指定索引下标的元素
lset key index newValue

使用场景:
经常会被用于消息队列的服务,以完成多程序之间的消息交换,Redis的 lpush+brpop 命令组合即可实现阻塞队列。


4、集合(Set)
  • Redis 的 Set 是 String 类型的 无序集合。集合成员是 唯一 的,这就意味着集合中不能出现重复的元素。
  • Redis 中集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是 O(1)
  • 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

常用命令:

//添加一个或多个成员
sadd key member1 [member2......]
//判断某成员是否存在
sismember key member

//获取所有成员个数
scard key
//获取所有成员
smembers key
//随机返回集合中一个或多个成员
srandmember key [count]
//随机移除并返回集合中一个成员
spop key
//删除集合中一个或多个成员(返回成功删除元素的个数)
srem key member1 [member2 ...]

//求多个集合的交集
sinter key1 [key2 ...]
//求多个集合的并集
suinon key1 [key2 ...]
//求多个集合的差集
sdiff key1 [key2 ...]

//多个集合求交集、并集、差集,并保存在目标集合
sinterstore destination key1 [key2 ...]
suionstore destination key1 [key2 ...]
sdiffstore destination key1 [key2 ...]

//移动元素
smove sourceKey destinationKey member

常用场景:
1、抽奖:因为集合中不能存放重复元素,pop可以随机移除一个元素;
2、好友推荐:利用求交集的方式求两个用户的共同兴趣爱好。


5、有序集合(zset – Sorted Set)
  • Redis 有序集合和集合一样也是string类型元素的集合,且 不能有重复的成员,而且还 可以排序
  • 它和列表使用索引下标作为排序依据不同的是,它给每个元素设置一个 分数(score) 作为排序的依据。
  • 有序集合的成员是唯一的,但分数(score)却可以重复。
  • 集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是 O(1)
  • 集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)。

常用方法:

//添加一个或多个成员,或者更新已存在成员的分数
zadd key score member [score2 menber2 ...]
//获取所有成员个数
zcard key
//增加指定成员分数increment
zincrby key increment member
//删除一个或多个成员
zrem key member1 [member2 ...]

//获取指定成员的分数(如果不存在则返回null)
zscore key member
//获取成员排名,返回成员的索引,zrank表示分数从低到高排序,zrevrank表示分数从高到低排序
zrank key member
zrevrank key member

//获取指定排名范围的成员,索引排序,zrange表示分数从低到高排序,zrevrange表示分数从高到低排序
//(withscores的作用就是讲查询结果中的分数值也带上)
zrange key startIndex endIndex [withscores]
zrevrange key startIndex endIndex [withscores]
//删除指定排名范围的成员
zremrangebyrank key startIndex endIndex

//获取指定分数范围的成员,zrangebyscore表示分数从低到高排序,zrevrangebyscore表示分数从高到低排序
zrangebyscore key scoreMin scoreMax [withsores] [limit offset count]
zrevrangebyscore key scoreMax scoreMin [withscores] [limit offset count]
//删除指定分数范围的成员
zremrangbyscore key scoreMin scoreMax
//获取指定分数范围的成员个数
zcount key scoreMin xcoreMax

//计算给定的一个或多个有序集的交集,并将结果集存储在新的集合key中
//numkeys表示所有key的数量。
//默认情况下,结果集中某个成员的分数值是所有给定集下该成员分数值之和。
zinterstore destination numkeys key1 [key2 ...]
//计算给定的一个或多个有序集的并集,并将结果集存储在新的集合key中
zunionstore destination numkeys key1 [key2 ...]

应用场景:
1、排行榜;
2、展示用户信息,比如班级根据学生分数排序


补充:
  Redis(REmote DIctionary Server)是一个开源的使用ANSI C语言 编写的基于内存亦可持久化的日志型,key-value数据库,并提供了多种语言。它通常被称为数据结构服务器,因为值可以是string,hash,list,set,zset。
  Redis采用了单线程架构和I/O多路复用模型来实现高性能的内存数据库服务,Redis执行命令的速度非常快,官方给出的数字是读写性能可以达到 10万/秒,在单线程的架构下为什么能如此快呢?主要有四点原因:①Redis的所有数据是存放在 内存 中的;②Redis是 C语言 实现的,C语言实现的程序距离操作系统更近;③Redis使用了 单线程 架构,预防了多线程可能产生的竞争问题,例如CPU频繁切换,资源竞争等问题。④Redis 源代码非常少,可以说是精打细磨的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值