关于redis:数据类型及操作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
其余操作: 分为字符串和二进制位,如下图:

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官网查看。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理