热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NoSQL:Redis(keyvalue存储)

安装下载:https:redis.io解压:tarzxvfredis-3.2.5.tar.gz复制:推荐放到usrlocal目录下sudomv-rredis-3.2.3*usrlo

安装

  • 下载 : https://redis.io
  • 解压 : tar zxvf redis-3.2.5.tar.gz
  • 复制: 推荐放到usr/local目录下

    sudo mv -r redis-3.2.3/* /usr/local/redis
    进入redis目录
    cd /usr/local/redis/

  • 生成 : sudo make
  • 测试 : sudo make test -> 运行时间会较长
运行
  • 启动服务器 : 在桌面目录 redis-server (按ctrl+c停止)
  • 启动客户端: 在新终端中运行 redis-cli
  • 运行命令

    ping
    set 'a' '123'

  • 当添加键值后, 发现在当前运行目录下, 创建了一个文件; dump.rdb, 这个文件用于将数据持久化存储

基本配置

基本配置
  • 在源文件/usr/local/redis目录下, 文件redis.conf为配置文件
  • 绑定地址: 如果需要远程访问, 可将此行注释 : bind 127.0.0.1
  • 端口: 默认为6379 port 6379
  • 是否以守护进程运行
    • 如果以守护进程运行, 则不会再命令行阻塞, 类似于服务
    • 如果以非守护进程运行, 则当前终端被阻塞, 无法使用
    • 推荐改为yes, 以守护进程运行
    • daemonize no|yes
  • 数据文件 : dbfilename dump.rdb
  • 数据文件存储路径

    dir的默认值为 ./, 表示当前目录
    推荐改为: dir /var/lib/redis

使用配置文件方式启动
  • 直接运行redis-server会直接运行, 阻塞当前终端
  • 一般配置文件都放在/etc/目录下 : sudo cp /usr/local/redis/redis.conf /etc/redis/
  • 推荐制定配置文件启动 : sudo redis-server /etc/redis/redis.conf
  • 停止redis服务

    ps ajx|grep redis
    sudo kill -9 redis的进程id

数据操作

  • redis是key-value的数据, 所以每个数据都是一个键值对
  • 键的类型是字符串
  • 值的类型分为5种 :
    • 字符串 : string
    • 哈希 : hash
    • 列表 : list
    • 集合 : set
    • 有序集合 : zset
string
  • string 是 redis最基本的类型
  • 最大能存储512MB数据
  • string类型是二进制安全的, 即可以为任何数据(数字, 图片, 序列化对象)
  • 命令 :
    • 设置
      • 设置键值 : set key value
      • 设置键值及过期时间, 以秒为单位 : SETEX key seconds value
      • 设置多个键值 : MSET key value [key value ...]
    • 获取
      • 根据键获取值, 如果不存在此键则返回nil : GET key
      • 根据多个键获取多个值 : MGET key [key ...]
    • 运算(要求值必须是数字, 才能参与运算)
      • 将key对应的value加1 : INCR key
      • 将key对应的value减1 : DECR key
      • 将key对应的value减整数 : DECRBY key decrement
    • 其他
      • 追加值 : APPEND key value
      • 获取值长度 : STRLEN key
键命令
  • 查找建, 参数接受正则 : KSYS pattern
  • 判断键是否存在, 如果存在返回1, 不存在返回0 : EXIST key [key ...]
  • 查看键对应的value的类型 : TYPE key
  • 删除键及对应的值 : DEL key [key ...]
  • 设置过期时间, 以秒为单位(创建的时候没有设置过期时间, 则会一直存在, 知道使用DEL移除) EXPIRE key seconds
  • 查看有效时间, 以秒为单位 : TTL key
hash
  • hash用于存储对象, 对象的格式为键值对
  • 设置 :
    • 设置单个属性 : HSET key field value
    • 设置多个属性 : HMSET key field value [field value ...]
  • 获取 :
    • 获取一个属性 : HGET key field
    • 获取多个属性 : HMGET key field [field ...]
    • 获取所有属性和值 : HGETAll key
    • 获取所有的属性 : HKEYS key
    • 返回包含属性的个数 : HLEN key
    • 获取所有值 : HVALS key
  • 其他 :
    • 判断属性是否存在 : HEXISTS key field
    • 删除属性及值 : HDEL key field [field ...]
    • 返回值的字符串长度 : HSTRLEN key field
list
  • 列表的元素类型为string
  • 按照插入顺序排序
  • 在列表的头部或者尾部添加元素
  • 设置 :
    • 在头部插入数据 : LPUSH key value [value ...]
    • 在尾部插入数据 : RPUSH key value [value ...]
    • 在一个元素的前|后插入新元素 : LINSERT key BEFORE|AFTER PIVOT value
    • 索引: LSET key index value
      • 设置指定索引的元素值
      • 索引是基于0的下标
      • 索引可以是负数, 表示偏移量是从list尾部开始计数, 如-1表示列表的最后一个元素
  • 获取 :
    • 移除并且返回key对应的list的第一个元素 : LPOP key
    • 移除并且返回key对应的list的最后一个元素 : RPOP key
    • 返回一个范围 : LRANGE key start stop
      • 返回存储在key的列表里制定范围内的元素
      • start和end偏移量都是基于0的下标
      • 偏移量也可以是负数, 表示偏移量是从list尾部开始计数, 如-1表示列表的最后一个元素
  • 其他 :
    • 裁剪列表, 改为元集合的一个子集 : LTPIM key start stop
      • start和end偏移量都是基于0的下标
      • 偏移量也可以是负数, 表示偏移量是从list
    • 返回存储在key里的list的长度 : LLEN key
    • 返回列表里索引对应的元素 : LINDEX key index
set
  • 无序集合
  • 元素为string类型
  • 元素具有唯一性, 不重复
  • 设置 :
    • 添加元素 : SADD key member [member ...]
  • 获取 :
    • 返回key集合所有的元素 : SMEMBERS key
    • 返回集合元素个数 : SCARD key
  • 其他 :
    • 求多个集合的交集 : SINTER key [key ...]
    • 求某集合与其他集合的差集 : SDIFF key [key ...]
    • 求多个集合的合集 : SUNION key [key ...]
    • 判断元素是否在集合中 : SISMEMBER key member
zset
  • sorted set, 有序集合

  • 元素为string类型

  • 元素具有唯一性, 不重复

  • 每个元素都会关联一个double类型的score, 表示权重, 通过权重将元素从小到大排序

  • 元素的score可以相同

  • 设置 :

    • 添加元素 : ZADD key score member [score member ...]
  • 获取 :

    • 返回制定范围内的元素 : ZRANGE key start stop
    • 返回元素个数 : ZCARD key
    • 返回有序集key中, score值在min和max之间的成员 : ZCOUNT key min max
    • 返回有序集key中, 成员member的score值 : ZSCORE key member
  • 其他 :

    • 求多个集合的交集 : SINTER key [key ...]
    • 求某集合与其他集合的差集 : SDIFF key [key ...]
    • 求多个集合的合集 : SUNION key [key ...]
    • 判断元素是否在集合中 : SISMEMBER key member

高级用法

发布订阅
  • 发布订阅
    • 发布者不是计划发送消息给特定的接收者(订阅者), 而是发布的消息分到不同的频道, 不需要知道什么样的订阅者订阅
    • 订阅者对一个或多个频道感兴趣, 只需要接受感兴趣的消息, 不需要知道什么样的发布者发布的
    • 发布者和订阅者的解耦合可以带来更大的扩展性和更加动态的网络拓扑
    • 客户端发到频道的消息, 将会被推送到所有订阅此频道的客户端
    • 客户端不需要主动去获取消息, 只需要订阅频道, 这个频道的内容就会被推送过来
  • 消息的格式
    • 推送消息的格式包含三部分
    • part1: 消息类型, 包含三种类型
      • subscribe : 表示订阅成功
      • unsubscribe : 表示取消订阅成功
      • message : 表示其它终端发布消息
    • 如果第一部分的值为subscribe, 则第二部分是频道, 第三部分是现在订阅的频道的数量
    • 如果第一部分的值为unsubscribe, 则第二部分是频道, 第三部分是现在订阅的频道的数量, 如果为0则表示当前没有任何订阅任何频道, 当在Pub/Sub以外状态, 客户端可以发出任何redis命令
  • 如果第一部分的值为message, 则第二部分是来源频道的名称, 第三部分是消息的内容
  • 命令
    • 订阅 : SUBSCRIBE 频道名称 [频道名称 ... ]
    • 取消订阅 : UNSUBSCRIBE 频道名称 [频道名称 ... ] (如果不写参数, 则表示取消所有订阅)
    • 发布 : PUBLISH 频道 消息
主从配置
  • 一个mater可以拥有多个slave, 一个slave又可以拥有多个slave, 如此下去, 形成了强大的多级服务器集群架构
  • 比如 : 将ip为192.168.1.10的机器作为主服务器, 将ip为192.168.1.11的机器作为从服务器
    • 设置主服务器的配置 : bind 192.168.1.10
    • 设置从服务器的配置 : (注意: 在slaveof后面写主机ip, 再写端口(端口必须写))

      bind 192.168.1.11
      slaveof 192.168.1.10 6379

    • 在master和slave分别执行info命令, 查看输出信息
      • 在master上写数据 : set hello world
      • 在slave上读数据 : get hello

推荐阅读
  • 使用 Jupyter Notebook 实现 Markdown 编写与代码运行
    Jupyter Notebook 是一个开源的基于网页的应用程序,允许用户在同一文档中编写 Markdown 文本和运行多种编程语言的代码,并实时查看运行结果。 ... [详细]
  • vsftpd配置(虚拟用户、匿名用户登录)
    一、ftp服务搭建(一)概述1.ftp连接及传输模式(1)控制连接TCP21,用于发送FTP命令信息 ... [详细]
  • 本文探讨了 TypeScript 中泛型的重要性和应用场景,通过多个实例详细解析了泛型如何提升代码的复用性和类型安全性。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 探讨Redis的最佳应用场景
    本文将深入探讨Redis在不同场景下的最佳应用,包括其优势和适用范围。 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • WPF项目学习.一
    WPF项目搭建版权声明:本文为博主初学经验,未经博主允许不得转载。一、前言记录在学习与制作WPF过程中遇到的解决方案。使用MVVM的优点是数据和视图分离,双向绑定,低耦合,可重用行 ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
author-avatar
我的明天谁2502931447
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有