redis-redis之string的常用api和使用场景

redis之string的常用api和使用场景

命令参考

string的值最大不能超过512M。
redis命令参考:http://redisdoc.com/index.html
建议大家学习redis的时候,先将string、hash、list、set和zset这五种常用的数据结构的api去学习一下。

常用api

SET

SET key value [EX seconds] [PX milliseconds] [NX|XX]
可选参数
  • EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。
  • PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。
  • NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value 。
  • XX : 只在键已经存在时, 才对键进行设置操作。
使用场景
  • 分布式锁
    参考redis官方:https://redis.io/topics/distlock
SET resource_name my_random_value NX PX 30000

建议使用redisson,能减少很多问题:如生存时间到了,程序的逻辑还没有完成,锁提前释放等问题

  • 缓存数据
    将数据以json串的形式存储到数据库,以用户数据为例:
set user:id:1 {id:1,name:zhangsan}

优点:简化编程,如果合理的使用序列化可以提高内存的使用效率。
缺点:序列化和反序列化有一定的开销,同时每次更新属性都需要把全部数据取出进行反序列化,更新后再序列化到Redis中。

STRLEN

STRLEN key

返回键 key 储存的字符串值的长度,每个中文占用3个字节

MSET

MSET key value [key value …]

同时为多个键设置值。
如果某个给定键已经存在, 那么 MSET 将使用新值去覆盖旧值, 如果这不是你所希望的效果, 请考虑使用 MSETNX 命令, 这个命令只会在所有给定键都不存在的情况下进行设置。
MSET 是一个原子性(atomic)操作, 所有给定键都会在同一时间内被设置, 不会出现某些键被设置了但是另一些键没有被设置的情况。
批量存储值,能减少网络io的时间。

使用场景
  • 缓存数据
    如果使用json的方式缓存数据不便于修改,如果使用如下方式缓存数据方便修改:
MSET u:1:name zhangsan u:sex:1 male
//如果需要修改name
SET u:1:name lisi

优点:简单直观,每个属性都支持更新操作。
缺点:占用过多的键,内存占用量较大,同时用户信息内聚性比较差,所以此种方案一般不会在生产环境使用。

内部编码

字符串类型的内部编码有3种:

  • int:8个字节的长整型。
  • embstr:小于等于39个字节的字符串。
  • raw:大于39个字节的字符串。

Redis会根据当前值的类型和长度决定使用哪种内部编码实现。

使用如下命令可查看:

object encoding key

开发提示

与MySQL等关系型数据库不同的是,Redis没有命令空间,而且也没有对键名有强制要求(除了不能使用一些特殊字符)。但设计合理的键名,有利于防止键冲突和项目的可维护性,比较推荐的方式是使用“业务名:对象名:id:[属性]”作为键名(也可以不是分号)。
例如MySQL的数据库名为vs,用户表名为user,那么对应的键可以用"vs:user:1","vs:user:1:name"来表示,如果当前Redis只被一个业务使用,甚至可以去掉“vs:”。如果键名比较长,例如“user:{uid}:friends:messages:{mid}”,可以在能描
述键含义的前提下适当减少键的长度,例如变为“u:{uid}:fr:m:{mid}”,从而减少由于键过长的内存浪费。

常用场景

  • 缓存功能
  • 计数,使用incr、incrby
  • 共享Session
  • 限速

参考:
Redis开发与运维
http://redisdoc.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值