zoukankan      html  css  js  c++  java
  • redis学习(五)

    一、Redis 发布订阅

    1、Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

    2、Redis 客户端可以订阅任意数量的频道。

    比如你订阅了银行的频道,当你的资金发生变动时,银行就会通过它的频道给你发送信息,在这里,你是属于被动接收的,而不是向银行索要信息,这个例子中,你就是sub(订阅者),而银行就是pub(发布者)。

    3、java如何操作redis:

    redis是一种缓存数据库,它也是C/S的结构,也就是客户端和服务端,一般来说,在java中,我们通常使用 jedis(客户端)去操作redis(服务端),这其中操作的时候,两者之间肯定要建立连接,就像数据库链接一样,在关系型数据库中,我们一般都维护一个连接池,以达到链接的复用,来省去建立连接和关闭连接的时间。所以在jedis中,同样也存在一个jedispool(jedis连接池)的概念,我们都是从池中去取连接使用。

    4、常用命令

    订阅频道:subscribe chat1
    发布消息:publish chat1 "hell0 ni hao"
    查看频道:pubsub channels
    查看某个频道的订阅者数量: pubsub numsub chat1
    退订指定频道: unsubscrible chat1   , punsubscribe java.*
    订阅一组频道: psubscribe java.*

    二、Redis 事务

    1、Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

    • 批量操作在发送 EXEC 命令前被放入队列缓存。
    • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
    • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

    单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

    事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

    2、一个事务从开始到执行会经历以下三个阶段:

    • 开始事务。 MULTI
    • 命令入队。批量命令
    • 执行事务。EXEC

    4、常用命令

    redis事物:隔离性,原子性, 

    步骤: 开始事务,执行命令,提交事务   

    Multi  开始事务
    DISCARD 取消事务,放弃执行事务块内的所有命令。
    WATCH key [key ...] 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
    UNWATCH 取消 WATCH 命令对所有 key 的监视。

    EXEC //提交事务

    三、Redis 脚本

    1、Redis 脚本使用 Lua 解释器来执行脚本。 Redis 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL

    2、Eval 命令的基本语法如下:EVAL script numkeys key [key ...] arg [arg ...]

    五、Redis 连接

    Redis 连接命令主要是用于连接 redis 服务。

    六、Redis 服务器

    1、Redis 服务器命令主要是用于管理 redis 服务。

    2、Redis服务器负责与多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来维持服务器自身的运转

    3、命令请求的执行过程

      set key value

      那么从客户端发送set key value 命令到获得回复ok期间,客户端和服务器共需要执行以下操作

      1:客户端向服务器发送命令请求set key value

      2:   服务器接收并处理客户端发来的命令请求 set key value 在数据库中进行设置操作,并产生命令回复ok

      3:服务器将命令回复OK发送给客户端

      4:客户端接收服务器返回的命令回复OK

    借鉴博文:https://www.runoob.com/redis/redis-server.html

         https://www.cnblogs.com/paulversion/p/8320782.html

         https://www.cnblogs.com/cxxjohnson/p/9072383.html

  • 相关阅读:
    iOS 面试题搜集
    iOS 常用第三方类库、完整APP示例
    iOS 键盘遮挡输入 解决办法
    iOS UIColor RGB HEX
    iOS APP性能优化
    iOS Swift 数组 交换元素的两种方法
    iOS CoreData primitive accessor
    iOS Start developing ios apps (OC) pdf
    iOS 传值方式
    iOS IB_DESIGNABLE IBInspectable @IBDesignable @IBInspectable 加速UI开发
  • 原文地址:https://www.cnblogs.com/dongtian-blogs/p/10801320.html
Copyright © 2011-2022 走看看