博客
关于我
redis ① redis安装&核心数据结构&高性能原理
阅读量:526 次
发布时间:2019-03-07

本文共 2965 字,大约阅读时间需要 9 分钟。

Redis 安装与核心数据结构全面指南

一、Redis 安装

安装 Redis 是使用现代应用开发中不可或缺的存储系统之一。以下是 Redis 的安装步骤:

  • 下载 Redis

    访问 Redis 官方下载页面 http://redis.io/download,获取最新版本的 Redis 源码包。

  • 解压源码

    将下载的 redis-版本号.tar.gz 解压到 /usr/local 目录下:

    wget http://download.redis.io/releases/redis-5.x.x.tar.gztar xf redis-5.x.x.tar.gzcd redis-5.x.x
  • 编译与安装

    在解压目录下,运行以下命令编译并安装:

    make
  • 配置 Redis

    Editar el archivo de configuración que se encuentra en el directorio del paquete:

    cp redis.conf /etc/redis/redis.conf
    • daemonize yes:启用后台运行模式。
    • protected-mode no:取消限制访问,允许其他机器访问(通常用于测试环境)。
    • 注释或删除 bind 127.0.0.1 以支持多网卡接口访问。
  • 启动服务

    运行以下命令启动 Redis 服务:

    src/redis-server redis.conf
  • 验证运行状态

    查看进程列表确认 Redis 是否运行:

    ps -ef | grep redis
  • 连接测试

    使用 Redis客户端工具进行测试:

    src/redis-cliquit  # 退出客户端
  • 停止服务

    停止 Redis 服务有以下方式:

    • 使用 pkill 命令:
      pkill -f redis-server
    • 使用进程号:
      kill -f $(pidof redis-server)
    • 或者通过客户端调用:
      src/redis-cli shutdown

  • 二、Redis 核心数据结构

    Redis 提供了多种核心数据结构,包括 String、Hash、List 和 Set 等,每种数据结构有其特定的应用场景。

    1. String 结构

    Redis String 是最基础的数据结构

    常用操作

    • SET key value:将键值对存入 Redis。
    • MSET key [key ...] value [value ...]:批量存储多个键值对。
    • SETNX key value:存入不存在的键值对,并返回布尔值(1 表示成功)。
    • GET key:获取键对应的字符串值。
    • MGET key [key ...]:批量获取多个键的字符串值。
    • DEL key [key ...]:删除指定的键值对。
    • EXPIRE key seconds:设置键的过期时间(单位为秒)。
    • INCR keyDECR key:实现原子加减操作。

    应用场景

    • 单值缓存
      简单存储和检索字符串数据。
    • 对象缓存
      使用 JSON 格式存储用户数据:
      SET user:$_id "${json_data}"

      批量存储:

      MSET user:$userId:prop1 "prop1Value" user:$userId:prop2 "prop2Value"

      获取:

      MGET user:$userId:prop1 user:$userId:prop2
    • 分布式锁
      简单实现锁机制:
      SETNX lock:$_item true

      业务完成后删除锁:

      DEL lock:$_item
    • 计数器
      统计访问次数:
      INCR page:$articleId: readsGET page:$articleId: reads

    2. Hash 结构

    Redis Hash 是 προhtable 键值对的集合,支持动态键 #

    常用操作

    • HSET/KSET key field value:存储或批量存储字段值。
    • HSETNX key field value:存储不存在的字段值。
    • HMGET/KMGET key field [field ...]:批量获取多个字段值。
    • HDEL/KDEL key field [field ...]:批量删除字段。
    • HLEN key:获取字段个数。
    • HINCRBY key field increment:批量增加字段值。

    应用场景

    • 对象缓存
      动态存储用户属性:
      HMSET user:$id name "张三" balance 1888
    • 购物车
      存储用户选择的商品:
      HSET cart:$userId product:$_id 1
    • 电商搜索
      基于多字段查询:
      SINTER brand:$_brand size:$_size

    三、高性能原理

    1. Redis 为什么这么快?

    Redis 采用单线程架构,但由于所有操作都在内存中完成,避免了磁盘 IO 的延迟开销。命令执行全由单线程处理,尽管其他任务如持久化和主从同步由其他线程完成,但核心流程的线程模型保证了其速度。

    2. 多路复用机制

    Redis 使用 NIO 权力模块实现 IO 多路复用,利用 epoll 模型将多个客户端连接轮询处理。这种方式在处理大量客户端时显著提升了性能,避免了线程切换的开销。

    3.禁止使用 keys *命令

    keys * 指令会阻塞主线程,导致性能严重下降。开发者应避免使用此类全量扫描命令,改用 scan 渐进式遍历实现精准操作。


    四、高级命令

    1. 扫描命令 SCAN

    Redis 提供 SCAN 命令用于逐页遍历数据库键值对。其参数包括:

    • cursor 游标值,用于标识当前遍历位置。
    • match 规则表达式,可用于筛选特定模式的键。
    • count 每次返回的元素数量。

    注意:SCAN 命令不是完全精确,可能会遗漏部分键值对,适用于需要迭代处理但不强依赖全局状态的场景。

    2. 集合操作

    集合结构支持丰富的集合运算,如:

    • 交集 (SINTER) 及并集 (SUNION)
      SINTER set1 set2 Result → 交集元素SUNION set1 set2 Result → 合并后的元素
    • 差集 (SDIFF)
      SDIFF set1 set2 set3 … Result → set1 与其他集合的差集
    • 元素遍历 (SMEMBERS, SCARD)
      获取集合元素及其数量。

    五、ZSet 排行榜

    ZSet(有序集合)用于实现分布式排行榜:

    • ZADD:插入有序元素及其分数值。
      ZADD sorted_set key score
    • ZREVRANGE:倒序获取元素-list:
      ZREVRANGE sorted_set start stop WITHSCORES
    • ZUNIONSTORE 和 ZINTERSTORE:合并多个有序集合。

    常见应用场景

    • 新闻热榜
      ZINCRBY hotNews:$(date +%s) 1 # 添加新闻ZREVRANGE hotNews:$(日期范围) 0 9 WITHSCORES # 获取前十名

    通过以上内容,可以清晰理解 Redis 的核心功能及其应用场景,并能够根据实际需求选择合适的数据结构和操作方式。

    转载地址:http://vlinz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现breadth First Search广度优先搜索算法(附完整源码))
    查看>>
    Objective-C实现BreadthFirstSearch广度优先搜索算法(附完整源码)
    查看>>
    Objective-C实现BreadthFirstShortestPath广度优先最短路径算法(附完整源码)
    查看>>
    Objective-C实现bubble sort冒泡排序算法(附完整源码)
    查看>>
    Objective-C实现Burke 抖动算法(附完整源码)
    查看>>
    Objective-C实现Burrows-Wheeler 算法(附完整源码)
    查看>>
    Objective-C实现CaesarsCiphe凯撒密码算法(附完整源码)
    查看>>
    Objective-C实现canny边缘检测算法(附完整源码)
    查看>>
    Objective-C实现cartesianProduct笛卡尔乘积算法(附完整源码)
    查看>>
    Objective-C实现check strong password检查密码强度算法(附完整源码)
    查看>>
    Objective-C实现chudnovsky algorithm楚德诺夫斯基算法(附完整源码)
    查看>>
    Objective-C实现CIC滤波器(附完整源码)
    查看>>
    Objective-C实现circle sort圆形排序算法(附完整源码)
    查看>>
    Objective-C实现CircularQueue循环队列算法(附完整源码)
    查看>>
    Objective-C实现clearBit清除位算法(附完整源码)
    查看>>
    Objective-C实现climbStairs爬楼梯问题算法(附完整源码)
    查看>>
    Objective-C实现cocktail shaker sort鸡尾酒排序算法(附完整源码)
    查看>>
    Objective-C实现cocktailShakerSort鸡尾酒排序算法(附完整源码)
    查看>>
    Objective-C实现CoinChange硬币兑换问题算法(附完整源码)
    查看>>
    Objective-C实现collatz sequence考拉兹序列算法(附完整源码)
    查看>>