美文网首页
Redis字符串API

Redis字符串API

作者: 若兮缘 | 来源:发表于2019-02-16 08:31 被阅读43次

字符串键值结构

key:对于redis而言所有的key都是一个字符串
value:实际可以为字符串、数字、二进制、json串
字符串的value最大限制为512MB,其实已经足够大了,实际使用最好不要过大,建议在100k以内。

字符串使用场景

还有很多很多应用场景,只要你掌握了这样的API就可以结合你的应用场景进行思考,然后进行API的选用来实现你的功能。

字符串常用命令

get、set、del命令演示
incr、decr、incrby、decrby命令演示

简单实战

记录网站每个用户个人主页的访问量

incr userid:pageview (单线程 : 无竞争)
redis是天然适合做计数器的,因为是单线程的,所以并发执行incr的时候不会有竞争问题,无论并发量多大都不会记错数。
很多网站或者应用会使用incr或者decr这样的命令来做计数器,非常简单但是非常实用。

缓存视频的基本信息(数据源在MySQL中)伪代码
public VideoInfo get(long id){
    String redisKey = redisPrefix + id;
    //这里省略了反序列化的步骤
    VideoInfo videoInfo = redis.get(redisKey);
    if (videoInfo == null){
        videoInfo = mysql.get(id);
        if (videoInfo != null){
            //序列化并存储到redis
            redis.set(redisKey, serialize(videoInfo));
        }
    }
    return videoInfo;
}
分布式id生成器

incr id (原子操作)
分布式id生成器,即多个应用并发访问获取的id是自增且不重复的,仍然可以使用incr这样的命令来实现,当然实际的实现方案会比这个要复杂一些,但是最基础的一个实现的思路或者原理都是使用这样一个规则。

其他命令

setnx、setxx、setex

其实这些都是set命令及选项的组合,使用这种组合命令好处是将多个操作作为一个原子操作来执行,就不会存在并发竞争的问题,在实现一些场景比如分布式锁是非常有用的。

mget、mset

mget和mset是批量操作,时间复杂度都是o(n),是非常方便且能提高性能的命令,但是一定要节制去使用。
使用时需要注意的是对于大数据量的获取,最好将其拆分成多个mget操作,例如获取10万个key操作,每次获取1000个,执行100次mget操作。

n次get命令 = n次网络时间 + n次命令时间

1次mget操作 = 1次网络时间 + n次命令时间

这里需要注意的是网络时间,因为客户端和服务端通常是在不同机器甚至是不同的机房、不同的地区,所以网络时间通常是一个很大的开销,而命令本身开销是非常小的,redis大部分命令执行速度都非常快,那么网络时间就显得非常珍贵。
所以使用mget这样的操作可以省去大量的网络时间。在很多场景下它的效率是非常高的,当然如果网络时间越长、获取key的个数越多效果越明显。

查缺补漏

getset、append、strlen

其中strlen命令的时间复杂度也是o(1),redis字符串内部也会对字符串长度进行实时更新,不需要遍历字符串来计算完整的长度。

incrbyfloat、getrange、setrange

常用命令总结

相关文章

  • Python 操作redis

    redis-py的API文档 一 String 字符串 二 list 列表 三 set 集合

  • Redis字符串API

    字符串键值结构 key:对于redis而言所有的key都是一个字符串value:实际可以为字符串、数字、二进制、j...

  • Redis--数据类型命令(一)

    Redis字符串(string) Redis字符串数据类型的相关命令用于管理redis字符串值 语法: redis...

  • Redis-API-字符串

    字符串的值能够表示数字(整数、浮点数),甚至是二进制(图片、音频、视频),但是值不能超过512MB。 命令 设置值...

  • redis-API-字符串

    值最大不能超过512MB 设置值 setex和setnx set key value [ex 秒] [px 毫秒]...

  • redis

    redis Redis 数据结构和底层实现string:简单动态字符串SDS,Redis 的字符串是动态字符串,是...

  • python操作redis

    连接redis服务 Redis 字符串(String) Redis 哈希(Hash) Redis 列表(List)...

  • Redis' strings

    Redis字符串基本操作命令 底层实现 Redis中,字符串对象是一个基础对象,所有键值均是字符串对象。Redis...

  • Redis入门到高可用-2.Redis API的使用和理解

    1.Redis API的使用和理解 通用命令 字符串类型 哈希类型 列表类型 集合类型 有序集合类型 2.通用命令...

  • Redis(二) - Jedis

    Jedis Java 和 Redis 打交道的 API 客户端。 连接 Redis 常用 API 事务 初始化余额...

网友评论

      本文标题:Redis字符串API

      本文链接:https://www.haomeiwen.com/subject/laqceqtx.html