zoukankan      html  css  js  c++  java
  • Redis安装与使用

    介绍

    Redis是可基于内存亦可持久化的Key-Value数据库(nosql数据库)
    NoSQL,泛指非关系型的数据库

    1. redis server 安装

    yum install redis    # 安装
    systemctl enable redis    # 设置开机启动
    service redis start | stop | restart    # 相关操作
    

    2. redis server 安全配置

    vim /etc/redis.conf
    

    bind 127.0.0.1 注释掉
    requirepass XXX密码 #初始为注释代码
    protected-mode no # 初始为yes
    daemonize yes # 如果为no,则改为yes
    重启后生效,再操作就会要求登陆验证

    3. 测试连接server

    redis-cli -h 127.0.0.1 -p 6379
    auth XXX密码
    

    验证了密码后,就可以进行相关操作

    4. 安装php redis扩展

    我是用的宝塔:对应PHP版本-> 插件安装-> redis安装
    使用宝塔安装方式,前3个步骤可省略,因为宝塔会自动安装其客户端软件。
    目录在/www/server/redis,配置文件以及相关命令都在里面。

    redis持久化前沿

    AOF和RDB的区别

    RDB:dump完整的db进行持久化,用save m n进行周期持久,性能消耗小,速度快,并且dump出的db可以转存到其它地方使用。
    官方默认开启:save 900 1,save 300 10,save 60 10000,设置了这三项,分别代表900s 有1次更改操作则写入rdb
    AOF:存储写日志的方式进行持久,appendfsync everysec:每秒同步一次,性能消耗大,安全系数高。

    AOF和RDB如何取舍

    对数据安全性要求比较高,可以两者同时使用。
    要求不是那么高的话,可以只开RDB,因为RDB是备份数据库文件方式,所以方便我们进行备份工作。

    开启持久化后,是否影响客户端读取性能?

    两者的持久化方式都是异步方式(单独开启了一个守护进程),所以不会影响客户端的性能。

    自动触发的场景

    1. save:根据我们的save m n / appendfsync everysec配置规则自动触发:save 900 1 (900s周期,如果有1条更改操作(新增或修改),则进行持久化)

    2. slave:节点之间全量复制时,主节点发送rdb文件给从节点完成复制操作,主节点会触发bgsave

    3. shutdown:执行shutdown时,如果没有开启aof,也会触发

    持久化的方式

    RDB:redis db

    在指定的save m n周期性对数据进行持久化。

    RDB的2种执行方式

    save:会阻塞当前Redis服务器,直到持久化完成,线上应该禁止使用。
    bgsave:另开启一条bgsave主进程异步守护redis数据变化情况,会触发会多个子fork进程进行持久化,fork子进程会阻塞bgsave主进程,影响redis的少许性能。

    AOF:appendonly filelog

    记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。

    1. AOF的2种执行方式

    参考RDB方式。
    appendfsync everysec:每秒同步一次,意味着有最多1秒的
    他们在进行持久化的时候,都会生成2个文件(新文件/旧文件),保证在进行持久化过程中,有新的数据写入时,保持完整性,持久化完成后,新文件删除,继续用旧文件。

    Redis数据类型

    String(字符串)

    1. set:实例set / get。键为 name,对应的值为 wangkun。

    2. get:如上

    redis 127.0.0.1:6379> set name "wangkun"
    OK
    redis 127.0.0.1:6379> get name
    "wangkun"
    

    Hash(哈希)

    1. hmset:实例中 hmset 设置了两个 field=>value 对

    2. hget:获取对应 field 对应的 value

    redis> hmset myhash field1 "Wk" field2 "Wx"
    "OK"
    redis> hget myhash field1
    "Wk"
    redis> hget myhash field2
    "Wx"
    

    List(列表)

    1. lpush key value:左插入,添加一个元素到列表的头部

    2. rpush key value:右插入,添加一个元素到列表的尾部

    3. lrange key start stop:显示列表的指定内容,格式:lrange mylist 0 10

    4. lpop key:移出并获取列表的第一个元素

    5. rpop key:移除并获取列表最后一个元素

    6. blpop key timeout:移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

    7. brpop key timeout:移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

    8. blpop和brpop,因为是阻塞式的,连接中的超时时间设置为0时,即可无限等待,直到弹出消息

    redis 127.0.0.1:6379> lpush mylist redis
    (integer) 1
    redis 127.0.0.1:6379> lpush mylist mongodb
    (integer) 2
    redis 127.0.0.1:6379> lpush mylist rabitmq
    (integer) 3
    redis 127.0.0.1:6379> lrange mylist 0 10
    1) "rabitmq"
    2) "mongodb"
    3) "redis"
    

    Set(无序集合)

    1. sadd:向集合添加元素

    2. smembers:显示列表的所有元素内容

    redis 127.0.0.1:6379> sadd myset redis
    (integer) 1
    redis 127.0.0.1:6379> sadd myset mongodb
    (integer) 1
    redis 127.0.0.1:6379> sadd myset rabitmq
    (integer) 1
    redis 127.0.0.1:6379> sadd myset rabitmq
    (integer) 0
    redis 127.0.0.1:6379> smembers myset
    
    1) "redis"
    2) "rabitmq"
    3) "mongodb"
    

    Zset(Sorted Set:有序集合)

    1. zadd:向集合添加元素,格式:zadd key score member

    2. zrange / zrangebyscore:显示集合的所有元素内容(根据score进行排序)

    redis 127.0.0.1:6379> zadd myzset 0 redis
    (integer) 1
    redis 127.0.0.1:6379> zadd myzset 0 mongodb
    (integer) 1
    redis 127.0.0.1:6379> zadd myzset 0 rabitmq
    (integer) 1
    redis 127.0.0.1:6379> zadd myzset 0 rabitmq
    (integer) 0
    redis 127.0.0.1:6379> > zrangebyscore myzset 0 1000
    1) "mongodb"
    2) "rabitmq"
    3) "redis"
    

    设置 key 过期时间

    expire keyname 5(单位秒)
    

    列出所有的key

    命令:KEYS pattern
    列出所有的key

    keys *
    

    列出匹配的key

    redis>keys apple* 
    1) apple1
    2) apple2
    

    删除 key

    del keyname
    

    Redis 发布订阅

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

    订阅

    开启客户端client1...5

    redis 127.0.0.1:6379> subscribe channel1
    
    Reading messages... (press Ctrl-C to quit)
    1) "subscribe"
    2) "redisChat"
    3) (integer) 1
    

    发布消息

    redis 127.0.0.1:6379> publish channel1 "Redis is a great caching technique"
    
    (integer) 1
    
    redis 127.0.0.1:6379> publish channel1 "Learn redis by runoob.com"
    
    (integer) 1
    
    # 订阅者的客户端会显示如下消息
    1) "message"
    2) "channel1"
    3) "Redis is a great caching technique"
    1) "message"
    2) "channel1"
    3) "Learn redis by www.zhuifanba.com"
    

    Redis实现消息队列

    可利用“List的阻塞功能” 或 “发布订阅” 功能实现消息队列功能。

    List的阻塞功能

    worker进行blpop某个List,只要有要处理的信息,立即处理。

    发布订阅

    客户端请求redis入队List数据,同时发布(PUBLISH)消息A到频道channel,此时已经订阅channel的worker就接收到了消息A,知道了List中有消息A进入,即可循环lpop或rpop来消费List中的消息。

  • 相关阅读:
    creat-react-app/dva静态项目,用nginx部署在次级域名路径(如a.com/sub/)需要注意的几点
    如何在 Rails 中搭配 Turbolinks 使用 Vue
    绝对干货!漫谈美团APP对Crash的治理之路
    下载更省心!12月这些应用获得了绿色应用认证!
    代码之外的生存指南,这6本书助你提升软实力
    “社交通讯类”Target SDK≥26优秀应用展示
    “实用工具类”Target SDK≥26优秀应用展示
    “购物比价类”Target SDK≥26优秀应用展示
    知否知否!应用市场上架Target SDK新规来袭
    大咖推荐!今年值得一读的6本技术类书籍
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452928.html
Copyright © 2011-2022 走看看