• 介绍下官网Redis编程模式


    缘由

    以前只是接触过redis,只有最近才比较深入研究了下,觉得有几个重要的概念可以积累出来,以利于帮助理解redis 😃

    本文仅简述重点概念,和列举相关参考文档链接,但参见文档多来自redis官网,足见其权威,需要深入研究的同学,可以自便。

    特点

    字符串二进制安全

    rediskeystore是基于key:value的。
    value被对待成特别的字符串结构体处理,redis中的字符串概念显著区别于C语言字符串,它是二进制安全的,也就是说可以存储任何二进制的串!

    C语言中,普通的字符串如果遇到字符’\0’或二进制的单字节零值,均会被认为是字符串的结尾

    但在,redis中是基于memcpy | memcmp ..mem*的操作,带有明确的长度的参数,进行redis系统内的字符串操作,所以,可以保证字符串的二进制安全。

    如何插入二进制数据

    • redis-cli和’lua script’

    如果要存储二进制数据,则需要将要存储的二进制数据编码为hex字符串

    set key "{\x45\x12\x32\x13}"
    
    • 1
    redis.pcall('set', 'key', '{\\x45\\x12\\x32\\x13}')
    
    • 1
    • hiredis客户端库

    hiredis库可以使用%b格式化符,特别地传入地址指针和长度参数,可以将二进制流存储到redis

    如果是%s字符串,hiredis则根据strlen来自主计算长度

    lua 脚本

    • 高效

    因为lua scriptredis服务器端执行,可以有效避免那些需要redis-cli一次往返,才能够实施的后续动作

    • 原子粒度

    lua script脚本提供了多步操作很好的原子性操作粒度

    lua脚本调试、

    # 注意key和参数arg之间的空格和逗号
    ./redis-cli --ldb --eval /tmp/script.lua mykey somekey , arg1 arg2
    
    • 1
    • 2

    快捷操作上十分类似gdb

    lua-debugging

    批量处理(Bulk loading)

    • redis-cli
    
    echo "
    SET Key0 Value0
    SET Key1 Value1
    ...
    SET KeyN ValueN
    " > data.txt
    
    cat data.txt | redis-cli --pipe
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    pipelining

    • hiredis客户端库
    // hiredis api
    redisReply *reply;
    redisAppendCommand(context,"SET foo bar");
    redisAppendCommand(context,"GET foo");
    redisGetReply(context,&reply); // Return of SET command
    freeReplyObject(reply);
    redisGetReply(context,&reply); // Return of GET command
    freeReplyObject(reply);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    bulk-loading

    分布式锁(Distributed Locks with Redis)

    对于比较简单的分布式锁使用场景,利用如下语法格式的分布式互斥锁,已经够用。但比较复杂的分布式、高可用场景,可以阅读官网文档建议的部署方式。

    SET resource_name my_random_value NX PX 30000
    
    • 1
    • 需要着重指出的是value是随机值,如果非自身则用lua脚本判断不能取消
    • NX指定覆盖条件
    • PX设定超时毫秒数

    Distributed Locks with Redis

    索引用法(Secondary indexing)

    redis具有的丰富的数据结构,例如,set、sorted set or list

    使用他们可以建立一些有用的索引集合,以利于快速查阅相关keys值,避免SCAN命令进行全库扫描!

    Secondary indexing

    参考

    Redis programming patterns

  • 相关阅读:
    15:00面试,15:06就出来了,问的问题有点变态。。。
    Java8新特性stream和parallelStream有什么区别
    python多进程
    Linux之J2EE的项目部署及发布
    比例-积分-微分 (PID) 鲁棒控制及电流反馈以确保 UPS 的稳定性(Matlab代码实现)
    Web 应用防火墙:Modsecurity 和核心规则集
    Mysql-联合查询及子查询
    DEM格式转换:转换NSDTF-DEM国标数据格式为通用格式,使用ArcGIS工具转换NSDTF-DEM国标.dem文件为通用.tif格式。
    QTday2
    2022年全球及中国手术感控行业头部企业市场占有率及排名调研报告
  • 原文地址:https://blog.csdn.net/jkler_doyourself/article/details/134561427