数据类型及操作——《Redis实战》

redis中key和value最大为512M字节
Redis中文官网: Redis官网-string

string

可存储:字符串(512M)、整数、浮点数

整数的取值范围 == 系统的long integer(32位系统为32位,64位系统为64位);
浮点数与double相同。
整数与浮点数可以进行自增、自减`INCR/DECR`;
增加固定整数`INCRBY/DECRBY`;
步长为浮点数`INCRBYFLOAT`。

当对字符串进行增减时,会抛出错误(error) ERR value is not an integer or out of range
其他操作: 分为字符串和二进制位,如下图:
数据类型及操作——《Redis实战》_第1张图片

list

双向链表。
数据类型及操作——《Redis实战》_第2张图片

阻塞式常用于消息传递和任务队列。(简易的rabbitMQ)
此外还可以应用于基于时间先后的情景:如,最近浏览记录。(暗含了时间先后,可以替代zset)

set

常用命令:增,删,查,求总数,随机弹出,随机移除,移到另一集合。
数据类型及操作——《Redis实战》_第3张图片

应用场景:共同XX,独有XX,多人共享XX

hash

存储多个键值对在一个key中。
数据类型及操作——《Redis实战》_第4张图片

一次放单个的指令 hset(一般不需要,因为hmset也可以放单个)

高级:是否存在,所有键,所有值,所有键值对,自增
数据类型及操作——《Redis实战》_第5张图片

hgetall谨慎使用,一般使用 hkeys查出所有键,再hget一个接一个取出值,避免阻塞。

zset

带权(score)的set。
数据类型及操作——《Redis实战》_第6张图片

除了set的基本操作外,还包括了关于score的操作: zcountzrankzscore、``

数据类型及操作——《Redis实战》_第7张图片

因为zset也是set,所以还包含并交差,相应的转储。
这里要注意,并交差的规则:
  • 聚集函数: 不带权的set,每一个被视作1,而带权的zset,权是为score,默认为权的总和,如果声明了聚集函数aggregate(SUN/MIN/MAX),则根据聚集函数来计算。
  • 权重: 可选WEIGHTS参数,若未设置,则为1比1,可设为WEIGHTS 2 3,则表示 总分数 = 前一个set*2 + 后一个set*3

pub/sub

基于管道/频道(channel)的通信。(Java NIO也是基于管道)
数据类型及操作——《Redis实战》_第8张图片

了解即可,有很多缺点,因为redis是单线程,所以有可能会出现消息丢失,客户端卡顿等等问题。
一般使用专业的MQ来做,如RabbitMQ,ActiveMQ,RocketMQ等等。

其他命令

排序(sort)
数据类型及操作——《Redis实战》_第9张图片
功能很强大,详情到:redis官网-sort
Redis事务
事务是将所有命令加入到队列中,一次性发给redis。
命令: WATCH、MULTI、EXEC、UNWATCH、DISCARD

最基本的就两个命令:MULTI开启事务,EXEC执行事务。
watch:用于multi前,监听一个/多个键,若有key在exec前被修改,则回滚事务,所有的命令都不执行。(乐观锁)
unwatch就是取消监听某些key了。
discard:取消掉事务,丢弃MULTI之后的命令,同时取消掉所有WATCH。

注意:redis事务本身不是原子操作,而是批量操作(batch),如果中间某个命令失败,是不会影响前后的命令的,也不会回滚。所以叫做批量操作更合适。(watch会可能导致回滚的)

键的过期时间

数据类型及操作——《Redis实战》_第10张图片

不得不提 setex这个命令,用于【原子操作】 设置string类型的键值和过期时间。
默认情况:键的过期时间是-1,是永久存在的。

此外,redis还支持Geo(地理坐标)、HyperLogLog(基数)等等类型数据,可以去redis官网查看。

你可能感兴趣的:(redis)