zoukankan      html  css  js  c++  java
  • Redis指南

    一、简介

    redis 和 memcached 都是高性能的键值缓存数据库服务,其中 memcached 支持多线程,而 redis 支持丰富的数据结构且能内置持久化机制。

    redis 数据都是以键值形式存储的,键是字符串类型,值有 7 种类型(本质上是5种,其中 HyperLogLog 是 string,而 GEO 是 zset,可以通过 object encoding keyname 查看,但由于功能上的差异较大,这里分为7种):

    1、string 字符串

    2、list 列表

    3、set 集合(所有命令均以 S 开头)

    4、hash 散列(所有命令均以 H 开头)

    5、zset 有序集合(所有命令均以 Z 开头)

    6、HyperLogLog

    7、GEO (redis 3.2)

    不同的值类型,甚至是同一种值类型,其底层实现也可能是不一样的(主要是考虑到不同情况下的效率优化),具体可以看 redis 源码。

    二、常见命令

    redis 的命令可以参考官网:https://redis.io/commands

    对英文不熟练的也可以看国人翻译的网站:http://redisdoc.com/

    以下对常见的命令进行列举

    1、键操作命令

     

    简单示例:

    127.0.0.1:6379> set age 18
    OK
    127.0.0.1:6379> dump age
    "x00xc0x12ax00xb2xebxabxbcx1dxebx911"
    127.0.0.1:6379> restore age1 5000 "x00xc0x12ax00xb2xebxabxbcx1dxebx911"
    OK
    127.0.0.1:6379> get age1
    "18"

    2、值操作命令:String

    3、值操作命令(List)

    4、值操作命令(Set)

     

    5、值操作命令(Hash)

    6、值操作命令(SortedSet)

    7、值操作命令(HyperLogLog)

    7、值操作命令(GEO) 

     

    三、发布与订阅

      redis 的发布与订阅,是以频道channel为中介,订阅者订阅相关channel,发布者向channel发送string类型消息,会通知到该channel相关的订阅者。在实际开发中,会有一些问题,其中一个问题是,客户端客观上会存在断线重连的情况,如果一个客户端在订阅了某个channel之后,断线重连了(已经不是原来的订阅者了),则需要重新订阅相关channel,而且会丢失断线期间的消息通知。另外,订阅的客户端会进行阻塞模式,一直监听 redis 通知的消息。取消订阅使用 unsubscribe ch1 [ch2] 命令,如果不带任何频道名,则表示退订所有频道,退订操作在官方提供的 redis-cli 中是无法模拟的,因为一旦执行订阅操作窗口就被阻塞了。
      

      基于 redis 发布与订阅功能,在 redis2.8后实现了键空间通知(keyspace)和键事件通知(keyevent)的功能,前者用于当指定模式的键发生了变化时进行通知,后者用于当发生指定的操作命令时进行通知。该功能需要消耗一定的CPU资源,默认是关闭,可通过修改 redis.conf 文件或执行 config set notify-keyspace-events AKE 来开启。命令中的 "AKE" 表示开启所有类型的通知,更细化的设置请参考官方手册,可以指定具体针对具体类型的键进行 keyspace 或 keyevent 通知。

      监视一个 keyspace/keyevent 的格式是 psubscribe __keyspace@<db>__:* 和 psubscribe __keyevent@<db>__:* ,如订阅 Users: 开头的键发生变化如下:

    psubscribe __keyspace@0__:Users:*

      而订阅删除事件的操作如下:

    psubscribe __keyevent@0__:del

      而如下的操作将会同时订阅 keyspace 和 keyevent,在执行类似 add key value 操作时,会收到两条通知消息:

    psubscribe __key*@0__:*

    四、事务

      redis 在一定程度上实现了事务逻辑(不支持回滚),通过 multi/exec 包含的命令集(顺序的将其中的命令入队,如果入队成功会返回 queued,如果入队失败则会导致事务失败,即使执行exec也会返回事务错误),将以原子操作执行(需要注意的是,如果事务队列中的某些命令执行成功,而某些命令执行失败是存在的,redis 并不会回滚。在事务命令入队时,redis只会检查严重的语法格式错误,逻辑错误是没法检测的,比如对一个string键执行 lpush 操作)。 multi 命令标记着事务的开始,exec 标记事务的结束并提交事务,discard 标记着事务的结束并放弃事务。与事务常常一起配合使用的有 watch 命令,该命令用于在事务开始前监视一个 key 的内容是否发生变化。 在执行 exec 命令提交事务时,redis会检测当前的 watch 队列中的数据是否发生变化,如果发生变化,则事务将不被执行(程序可以尝试重试操作,使用乐观锁是从效率考虑)。无论提交还是放弃(exec/discard)一个事务,都会清空当前的 watch 队列,如果需要在事务开始前取消一个之前watch的操作,可以使用 unwatch 命令。

      

      注意,如果 watch 的是一个带生存时间的键,那么即使该键过期了,redis 仍然认为其是没有变化的,事务仍可正常执行。

      redis 脚本是在 redis2.6 之后引入的另一种处理事务的方法,使用脚本要更简单,并且速度更快。redis 官方表示,短时间内并不会移除原有的事务功能,但未来如果脚本被广泛使用的话并不排除这种可能。

    五、服务器管理

    1、慢日志

      通过慢日志,可以记录执行时间较长的命令,从而便于找出项目的效率问题。

      通过下面的命令可以设置当命令耗时超过多少微秒时将被记录:

    config set slowlog-log-slower-than 10000 

      这些慢日志会记录到一个队列中,可以通过下面的命令设置队列的长度:

    CONFIG SET slowlog-max-len 1000

      查看慢日志可以用下面的命令,如果跟上数字,表示显示指定数量的日志:

    slowlog get [number]

      查看当前慢日志的数量:

    slowlog len

      清空慢日志:

    slowlog reset

    六、集群

    七、redis性能测试

    http://www.cnblogs.com/silent2012/p/4514901.html

  • 相关阅读:
    Policy Iterations for Reinforcement Learning Problems in Continuous Time and Space—Fundamental Theory and Methods
    (元)强化学习开源代码调研
    Model Based Reinforcement Learning for Atari
    A Brain-Inspired Decision Making Model Based on Top-Down Biasing of Prefrontal Cortex to Basal Ganglia and Its Application in Autonomous UAV Explorations
    A Spiking Neural Network Model of Model- Free Reinforcement Learning with High- Dimensional Sensory Input and Perceptual Ambiguity
    Strategy and Benchmark for Converting Deep Q-Networks to Event-Driven Spiking Neural Networks
    SLAYER: Spike Layer Error Reassignment in Time
    BindsNET: A Machine Learning-Oriented Spiking Neural Networks Library in Python
    Fine-Tuning and the Stability of Recurrent Neural Networks
    Q-learning and Pontryagin's Minimum Principle
  • 原文地址:https://www.cnblogs.com/tianyajuanke/p/6134323.html
Copyright © 2011-2022 走看看