美文网首页
redis学习指南

redis学习指南

作者: 翻滚吧MikelPan | 来源:发表于2018-12-16 14:31 被阅读8次

    一、redis安装

    # 安装最新版

    yum install -y epel-release vim atop htop net-tools git wget gcc-c++

    yum clean all

    yum maakecache

    wget -P /usr/local/src http://download.redis.io/releases/redis-5.0.3.tar.gz

    cd /usr/local/src && tar zxvf redis-5.0.3.tar.gz

    cdredis-5.0.3 && maake

    mkdir-p/usr/local/redis/etc

    cdsrc &&makeinstallPREFIX=/usr/local/redis

    cd../ &&mvredis.conf /usr/local/redis/etc

    sed-i's@daemonize no@daemonize yes@g'/usr/local/redis/etc/redis.conf

    echo'export PATH=/usr/local/redis/bin:$PATH'>> /etc/profile

    source/etc/profile

    # 配置开机启动

    vim/etc/systemd/system/redis-server.service

    -------------------------------------start----------------------------------------

    [Unit]

    Description=The redis-server Process Manager

    After=syslog.target network.target

    [Service]

    Type=simple

    PIDFile=/var/run/redis_6379.pid

    ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

    ExecReload=/bin/kill -USR2 $MAINPID

    ExecStop=/bin/kill -SIGINT $MAINPID

    [Install]

    WantedBy=multi-user.target

    ---------------------------------------end-------------------------------------------

    systemctl enable redis-server

    systemctl start redis-server

    二、redis数据类型

    # redis string

    redis 设置字符串

    127.0.0.1:6379>setmykey abc

    OK

    127.0.0.1:6379>getmykey

    "abc"

    EX seconds − 设置指定的到期时间(以秒为单位)。

    PX milliseconds-设置指定的到期时间(以毫秒为单位)。

    NX-仅在键不存在时设置键。

    XX-只有在键已存在时才设置

    # redis 加法计算

    set a 100 

    incr a

    (integer)101

    incr a 

    (integer)102 

    incrby a 100

    (integer) 202

    incr 每次加1

    incrby 加法运算

    # redis 创建数组

    mset a10 b10 c10

    mget a b c

    1) "10"

    2)"10"

    3)"10"

    # redis 列表

    rpush mylist A

    (integer) 1

    rpush mylist B

    (integer) 2

    lpush mylist first

    (integer) 3

    lrange mylist 0-1

    1)"first"

    2)"A"

    3)"B"

    del mylist

    rpush mylist a

    rpush mylist b

    lpush mylist c

    lrange mylist 0-1

    1)"c"

    2)"a"

    3)"b"

    lpop mylist

    "c"

    lrange mylist 0-1

    1)"a"

    2)"b"

    rpop mylist

    "b"

    lrange mylist 0-1

    1)"a"

    rpush 插入一个新的列表在尾部

    lpush 插入一个新的列表在首部

    lrange 检索0第一个-1最后一个

    del 删除列表

    lpop 从前将列表中元素剔除

    rpop 从后将列表中元素剔除

    redis 不存储空列表,当列表中元素被删除后,自动删除空列表

    # redis hashes

    hmset user:a usernam sb birth10 verfile1

    hget user:a username

    "sb"

    hget user:a birth

    "10"

    hgetall user:a

    1)"username"

    2)"sb"

    3)"birth"

    4)"10"

    5)"verfile"

    6)"1"

    hmget user:a username birth c

    1)"sb"

    2)"10"

    3) (nil)

    hincrby user:a birth10

    (integet) 20

    redis hashes 字符串和字符字段之间的映射,展现对象的完美数据类型

    hmset 设置多域的hash表

    hgetall 获取指定key的所有信息

    hget 获取单域的信息

    hmget 获取多域的信息,返回为数组

    hincrby hash字符加法运算

    # redis 集合

    set为无序集合,不包含相同的元素,支持不通集合合并,交集,找出不同的元素

    sadd myset a b c

    (integer) 3

    smembers myset

    1)"a"

    2)"b"

    3)"c"

    sismember myset1

    (integer) 1

    sismember myset0

    (integer) 0

    sismember myset a

    (integer) 1

    sismember mys3

    (integer) 0

    sadd 创建无序集合

    smember 查看集合

    sismember 匹配集合名称,内容及个数,成功返回为1,失败返回为0

    有序集合,集合的成员唯一,前面有参数用来排序,访问速度快,提高性能

    zadd hackers 1"a"2"b"3"c"

    (integer)1

    zrange hackers 0-1

    1)"a"

    2)"b"

    3)"c"

    zrevrange hackers 0-1

    1)"c"

    2)"b"

    3)"a"

    zrange hackers 0-1 withscores

    1)"a"

    2)"1"

    3)"b"

    4)"2"

    5)"c"

    6)"3"

    zadd 创建有序集合,集合名称必须为两位以上包含两位,需要加上序号参数

    zrange 正序查看集合

    zrevrange 倒序查看集合

    withscores  返回参数记录值

    三、redis常用命令

    # exists and del

    setmykey a

    OK

    exists mykey

    (integer)1

    del mykey

    (integer)1

    exits mykey

    (integer)0

    exists 判断key是否存在,存在返回为1,不存在返回为0,del删除key

    # type and keys

    set mykey a

    OK

    type mykey

    string

    keys my* 

    1)"myset"

    2)"mykey"

    type  返回key的类型

    keys my* 返回匹配的key列表

    # randomkey and clear

    randomkey 随机获得一个已经存在的key

    clear清除界面

    # rename and renamenx

    rename oldname newname 改key的名字,新建如果存在将会被替换

    renamenx oldname newname 改key的名字,新建如果存在将会失败

    dbsize 返回当前数据库key的总数

    # 限制key的生存时间

    setmykey a

    expire mykey10

    getkey

    "a"

    getkey

    (nil)

    expire 设置key 的过期时间

    ttl key  查询key的过期时间

    flushdb  清除当前数据库中所有的键

    flushall 清除所有数据库中的所有键

    # redis 设置命令

    config get requirepass (查看密码)

    config set requirepass 123

    auth 123

    configget*max-*-xxx*  查询数据最大数量

    config resetstat  重置数据统计

    # info 查看信息

    1、server:redis server常规信息

    2、clients:client 连接信息

    3、memory:内存信息

    4、persistence:rdb and aof 相关信息

    5、stats:常规信息

    6、replication:Master/slave 请求信息

    7、cpu:cpu占用信息

    8、cluster:redis集群信息

    9、keyspace:数据库信息统计

    10、all:返回所有信息

    11、默认设置信息

    四、redis管理

    # 设置密码

    方法一:

    grep -n requirepass /etc/redis/redis.conf

    sed -i 's@# requirepass@requirepass test@g' /etc/redis/redis.conf

    service redis-server restart

    redis-cli

    auth test

    redis-cli -a test

    方法二:

    config set requiress test

    # 主从复制

    1、master可以拥有多个slave

    2、多个slave可以连接在同一个master上,还可以连接其他的slave,当master宕机后,相连的slave转变为master

    3、主从复制不会阻塞master,再同步数据时,master 可以继续处理client请求

    4、slave与master建立连接,发送sync同步命令

    5、master会启动一个后台进程,将数据快照保存到文件中,同时master主进程会开始收集新的写命令并缓存

    6、后台完成保存后,就将此文件发送给slave

    7、slave将此文件保存在磁盘上

    配置主从

    ----------------------------------------------start----------------------------------------

    vim /usr/local/redis/redis.conf  (主)

    port 6379

    bind 172.16.5.1 127.0.0.1

    daemonize yes

    pidfile        /var/run/redis_6379.pid

    requirepass    redis

    vim /usr/local/redis/redis.conf  (从)

    port 6380

    bind 172.16.5.2127.0.0.1

    daemonize yes

    pidfile        /var/run/redis_6380.pid

    masterauth     redis

    登录客户端(主)

    redis-cli -a redis

    127.0.0.1:6379>set name redis-master

    127.0.0.1:6379> info repliaction

    登录客户端(从)

    redis-cli-aredis

    配置主从

    127.0.0.1:6380> slaveof 127.0.0.16379

    127.0.0.1:6380> info repliaction

    127.0.0.1:6380>get name

    # 事务

    只能client发起事务的命令可以连续执行,不会插入其他client命令,通过multi命令开始事务,后续的命令不会执行,被存放到一个对列中,当执行exec命令,redis顺序执行对列中所有命令,如果执行出错不会回滚。

    multi

    set name a

    set name b

    exec

    get name

    # 持久化

    1、快照,将数据放到文件中,默认方式

    将内存中的数据已快照的方式写入二进制文件中,默认文件为dunp.rdb,可以通过配置设置自动作快照持久化的方式,可配置redis在n秒内如果超过m个key被修改就自动保存快照。

    save 9001900秒内如果超过超过1个key被修改,则发起快照保存

    save 30010300秒内如果超过10个key被修改,则快照保存

    2、append-only file 将读写操作保存在文件中

    由于快照方式在一定时间间隔作一次,所以如果redis意外down掉的话,就会丢失最后一次次快照后的所有修改

    aof 比快照有更好的持久化,使用aof,redis将每一个收到的写命令都通过wirte函数写入到文件中当redis启动会通过重新执行文件中保存的写命令来在内存中重新建立整个数据的内容

    使用fsync函数强制os写入到磁盘的时间

    appendonly yes               // 启用aof持久化

    #appendfsync always    //  收到命令就写入磁盘,最慢,数据最完整

    appendfsync everysec   // 每秒写入磁盘一次,性能和持久化方面做了折中

    #appendfsync no          // 完全依赖os,性能最好,持久化没有保证

    相关文章

      网友评论

          本文标题:redis学习指南

          本文链接:https://www.haomeiwen.com/subject/cnxxkqtx.html