关于redis:数据类型及操作Redis实战

26次阅读

共计 1442 个字符,预计需要花费 4 分钟才能阅读完成。

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
其余操作: 分为字符串和二进制位,如下图:

list

双向链表。

阻塞式

阻塞式罕用于消息传递和工作队列。(繁难的 rabbitMQ)
此外还能够利用于基于工夫先后的情景:如,最近浏览记录。(暗含了工夫先后,能够代替 zset)

set

常用命令:增,删,查,求总数,随机弹出,随机移除,移到另一汇合。

高级操作:并 (union),交(inter),差集(diff),以及它们的转储。


简略示例:

利用场景:独特 XX,独有 XX,多人共享 XX

hash

存储多个键值对在一个 key 中。

一次放单个的指令hset(个别不须要,因为 hmset 也能够放单个)

高级:是否存在,所有键,所有值,所有键值对,自增

hgetall 审慎应用,个别应用 hkeys 查出所有键,再 hget 一个接一个取出值,防止阻塞。

zset

带权(score)的 set。

除了 set 的基本操作外,还包含了对于 score 的操作:zcountzrankzscore、“

因为 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 是单线程,所以有可能会呈现音讯失落,客户端卡顿等等问题。
个别应用业余的 MQ 来做,如 RabbitMQ,ActiveMQ,RocketMQ 等等。

其余命令

排序(sort)

性能很弱小,详情到:redis 官网 -sort
Redis 事务
事务是将所有命令退出到 队列 中,一次性发给 redis。
命令: WATCH、MULTI、EXEC、UNWATCH、DISCARD

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

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

键的过期工夫

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

此外,redis 还反对 Geo(地理坐标)、HyperLogLog(基数)等等类型数据,能够去 redis 官网查看。

正文完
 0