zoukankan      html  css  js  c++  java
  • redis学习

    https://redis.io/

    1. 安装redis

    > wget http://download.redis.io/releases/redis-5.0.5.tar.gz
    > tar -xzvf
    redis-5.0.5.tar.gz
    > cd redis-5.0.5
    > make
    > make test

    2. 运行redis-server

    > cd src && ./redis-server
    
    22501:C 05 Aug 2019 13:37:12.267 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    22501:C 05 Aug 2019 13:37:12.267 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=22501, just started
    22501:C 05 Aug 2019 13:37:12.267 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf
    22501:M 05 Aug 2019 13:37:12.268 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                    _._                                                  
               _.-``__ ''-._                                             
          _.-``    `.  `_.  ''-._           Redis 5.0.5 (00000000/0) 64 bit
      .-`` .-```.  ```/    _.,_ ''-._                                   
     (    '      ,       .-`  | `,    )     Running in standalone mode
     |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
     |    `-._   `._    /     _.-'    |     PID: 22501
      `-._    `-._  `-./  _.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |           http://redis.io        
      `-._    `-._`-.__.-'_.-'    _.-'                                   
     |`-._`-._    `-.__.-'    _.-'_.-'|                                  
     |    `-._`-._        _.-'_.-'    |                                  
      `-._    `-._`-.__.-'_.-'    _.-'                                   
          `-._    `-.__.-'    _.-'                                       
              `-._        _.-'                                           
                  `-.__.-'                                               
    
    22501:M 05 Aug 2019 13:37:12.270 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    22501:M 05 Aug 2019 13:37:12.271 # Server initialized
    22501:M 05 Aug 2019 13:37:12.271 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
    22501:M 05 Aug 2019 13:37:12.271 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
    22501:M 05 Aug 2019 13:37:12.271 * Ready to accept connections

    3. 测试客户端程序redis-cli

    > cd src && ./redis-cli -h host -p port -a password --raw
    127.0.0.1:6379> set mykey myvalue
    OK
    127.0.0.1:6379> get mykey
    "myvalue"
    127.0.0.1:6379> 

    --raw 避免中文乱码

    4. Redis CONFIG命令格式

    127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME
    127.0.0.1:6379> config get loglevel
    1) "loglevel"
    2) "notice"
    127.0.0.1:6379> config get *
      1) "dbfilename"
      2) "dump.rdb"
      3) "requirepass"
      4) ""
      5) "masterauth"
      6) ""
      7) "cluster-announce-ip"
      8) ""
      .....
    
      207) "unixsocketperm"
      208) "0"
      209) "slaveof"
      210) ""
      211) "notify-keyspace-events"
      212) ""
      213) "bind"
      214) "127.0.0.1"

    5. Edit configuration

    127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE
    127.0.0.1:6379> CONFIG SET loglevel "notice"
    OK
    redis 127.0.0.1:6379> CONFIG GET loglevel
    
    1) "loglevel"
    2) "notice"

    6. Redis数据类型

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

    string最大存储512MB,是最基本的类型

    Hash: HMSET and HGET设置键值对

    List:字符串列表,按照插入顺序排序,lpush/lrange

    Set:string类型的无序集合,复杂度是O(1), sdd/smemebers

    zset: string类型的有序集合,zdd/zrangebyscore

    7. 基本key命令

    127.0.0.1:6379> COMMAND KEY_NAME
    
    127.0.0.1:6379> SET runoobkey redis
    OK
    127.0.0.1:6379> DEL runoobkey
    (integer) 1

    DEL key

    DUMP key

    EXISTS key

    EXPIRE key seconds

    EXPIREAT key timestamp

    PEXPIRE key milliseconds

    PEXPIREAT key milliseconds-timestamp

    KEYS pattern

    MOVE key db

    PERSIST key

    PTTL key

    TTL key

    RANDOMKEY

    RENAME key newkey

    RENAMENX key newkey

    TYPE key

    8. Redis string

    https://www.runoob.com/redis/redis-strings.html

    9. Redis hash

    https://www.runoob.com/redis/redis-hashes.html

    10. Redis list

    https://www.runoob.com/redis/redis-lists.html

    11. Redis set

    https://www.runoob.com/redis/redis-sets.html

    12. Redis sorted set

    https://www.runoob.com/redis/redis-sorted-sets.html

    13. Redis HyperLogLog

    https://www.runoob.com/redis/redis-hyperloglog.html

    14. Redis pub/sub messages

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

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

    下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

    当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

    以下实例演示了发布订阅是如何工作的。在我们实例中我们创建了订阅频道名为 redisChat:
    
    redis 127.0.0.1:6379> SUBSCRIBE redisChat
    
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "redisChat"
    3) (integer) 1
    现在,我们先重新开启个 redis 客户端,然后在同一个频道 redisChat 发布两次消息,订阅者就能接收到消息。
    
    redis 127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique"
    
    (integer) 1
    
    redis 127.0.0.1:6379> PUBLISH redisChat "Learn redis by runoob.com"
    
    (integer) 1
    
    # 订阅者的客户端会显示如下消息
    1) "message"
    2) "redisChat"
    3) "Redis is a great caching technique"
    1) "message"
    2) "redisChat"
    3) "Learn redis by runoob.com"

    15. Redis transaction

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

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

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

    • 开始事务。
    • 命令入队。
    • 执行事务。

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

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

    redis 127.0.0.1:6379> MULTI
    OK
    
    redis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
    QUEUED
    
    redis 127.0.0.1:6379> GET book-name
    QUEUED
    
    redis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
    QUEUED
    
    redis 127.0.0.1:6379> SMEMBERS tag
    QUEUED
    
    redis 127.0.0.1:6379> EXEC
    1) OK
    2) "Mastering C++ in 21 days"
    3) (integer) 3
    4) 1) "Mastering Series"
       2) "C++"
       3) "Programming"

    16. Redis script file脚本

    Eval 命令的基本语法如下:
    
    redis 127.0.0.1:6379> EVAL script numkeys key [key ...] arg [arg ...]

    17. Redis 连接

    以下实例演示了客户端如何通过密码验证连接到 redis 服务,并检测服务是否在运行:
    
    redis 127.0.0.1:6379> AUTH "password"
    OK
    redis 127.0.0.1:6379> PING
    PONG

    18. Redis数据备份与恢复

    Redis SAVE 命令用于创建当前数据库的备份。

    redis 127.0.0.1:6379> SAVE 

    如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:

    redis 127.0.0.1:6379> CONFIG GET dir
    1) "dir"
    2) "/usr/local/redis/bin"

    创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。

    127.0.0.1:6379> BGSAVE
    
    Background saving started

    19. Redis 安全

    127.0.0.1:6379> CONFIG set requirepass "runoob"
    OK
    127.0.0.1:6379> CONFIG get requirepass
    1) "requirepass"
    2) "runoob"

    20. Redis性能

    Redis 性能测试是通过同时执行多个命令实现的。

    以下实例同时执行 10000 个请求来检测性能:

    $ redis-benchmark -n 10000  -q
    
    PING_INLINE: 141043.72 requests per second
    PING_BULK: 142857.14 requests per second
    SET: 141442.72 requests per second
    GET: 145348.83 requests per second
    INCR: 137362.64 requests per second
    LPUSH: 145348.83 requests per second
    LPOP: 146198.83 requests per second
    SADD: 146198.83 requests per second
    SPOP: 149253.73 requests per second
    LPUSH (needed to benchmark LRANGE): 148588.42 requests per second
    LRANGE_100 (first 100 elements): 58411.21 requests per second
    LRANGE_300 (first 300 elements): 21195.42 requests per second
    LRANGE_500 (first 450 elements): 14539.11 requests per second
    LRANGE_600 (first 600 elements): 10504.20 requests per second
    MSET (10 keys): 93283.58 requests per second

    Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:

    • 首先,客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。
    • 然后为这个 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法
    • 然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送

    21. Java中使用Redis

    jedis-xxx.jar

  • 相关阅读:
    Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置
    python 对数函数
    Python使用os.listdir()函数来得目录内容的介绍
    Linux下基于HTTP协议带用户认证的GIT开发环境设置
    在python中如何设置当前工作目录
    Python 获得命令行参数的方法
    Python time mktime()方法
    linux中怎样从底部向上查看log文件
    python基础之使用os.system来执行系统命令
    python datetime处理时间
  • 原文地址:https://www.cnblogs.com/ppju/p/11303883.html
Copyright © 2011-2022 走看看