zoukankan      html  css  js  c++  java
  • redis(nosql数据库)

     
    概述
    redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表[队列和栈],set[集合],sorted set[有序集合],hash(hash表))。用于数据不是很重要,变化快的。相关参考文档:http://redisdoc.com/index.html
    redis使用场景:
    1. 登录会话存储:存储在redis中,与memcached相比,数据不会丢失。
    2. 排行榜/计数器:比如一些秀场类的项目,经常会有一些前多少名的主播排名。还有一些文章阅读量的技术,或者新浪微博的点赞数等。
    3. 作为消息队列:比如celery就是使用redis作为中间人。
    4. 当前在线人数:还是之前的秀场例子,会显示当前系统有多少在线人数。
    5. 一些常用的数据缓存:比如我们的BBS论坛,板块不会经常变化的,但是每次访问首页都要从mysql中获取,可以在redis中缓存起来,不用每次请求数据库。
    6. 把前200篇文章缓存或者评论缓存:一般用户浏览网站,只会浏览前面一部分文章或者评论,那么可以把前面200篇文章和对应的评论缓存起来。用户访问超过的,就访问数据库,并且以后文章超过200篇,则把之前的文章删除。
    7. 好友关系:微博的好友关系使用redis实现。
    8. 发布和订阅功能:可以用来做聊天软件。
    redismemcached的比较:
     
    memcached
    redis
    类型
    纯内存数据库
    内存磁盘同步数据库
    数据类型
    在定义value时就要固定数据类型
    不需要
    虚拟内存
    不支持
    支持
    过期策略
    支持
    支持
    存储数据安全
    不支持
    可以将数据同步到dump.rdb中
    灾难恢复
    不支持
    可以将磁盘中的数据恢复到内存中
    分布式
    支持
    主从同步
    订阅与发布
    不支持
    支持
    redis安装启动
    1.安装:centos7
    wget http://download.redis.io/releases/redis-5.0.0.tar.gz
    tar -zxvf redis-5.0.0.tar.gz
    cd redis-5.0.0
    yum install gcc
    yum install gcc-c++
    make  &&  make install
    cp src/redis-server /usr/bin/
    cp src/redis-cli /usr/bin/
    对文件备份 cp redis.conf redis.conf.bak   (可省)
    mv redis.conf   /etc/redis.conf
    vim /etc/redis.conf     daemonize  yes   (守护进程)
    启动: redis-server /etc/redis.conf
    登录: redis-cli -p 63+79 -h 127.0.0.1    默认端口号6379
     
    设置键值
    设置
    将字符串值value关联到key。如果key已经持有其他值,set命令就覆写旧值,无视其类型。并且默认的过期时间是永久,即永远不会过期。键值对,一 一对应。
    添加
    set key value
    删除
    del key
    取值
    get key
    查看当前redis所有的key
    keys   *
     
    设置键值对的过期时间
    设置过期时间(已存在键值)
    expire key timeout(单位为秒)
    在设置值的时候,一同指定过期时间
    set key value EX timeout
    setex key timeout value
    查看过期时间
    ttl key
     
    hash,哈希操作
    将哈希表key中的域field的值设为value。field 和value 相当于之前的键值对,key为一个大的范围
    如果key不存在,一个新的哈希表被创建并进行 HSET操作。如果域 field已经存在于哈希表中,旧值将被覆盖。(可以理解为学校里的班级中的)
    添加一个新值
    hset key field value
    删除field中的某个field
    hdel key field
    获取哈希中的field对应的值
    hget key field
    获取某个哈希中所有的field
    hkeys key
    获取某个哈希中所有的值
    hvals key
    获取某个哈希中所有的field和value
    hgetall key
    获取哈希中总共的键值对(总共的字段)
    hlen key
    判断哈希中是否存在某个field
    hexists key field
     
    列表(list)操作  (可以存储重复值)
    在列表左边添加元素:将值value插入到列表key的表头。
    如果key不存在,一个空列表会被创建并执行lpush操作。当key存在但不是列表类型时,将返回一个错误。
    lpush key value
    在列表右边添加元素:将值value插入到列表key的表尾。
    如果key不存在,一个空列表会被创建并执行RPUSH操作。当key存在但不是列表类型时,返回一个错误。
    rpush key value
    查看列表中的元素:
    返回列表key中指定区间内的元素,区间以偏移量start和stop指定,如果要左边的第一个到最后的一个  0  -1 (在计算机中意味着一个循环)
    从左往右数序号是从零开始数的
    从右往左数序号是从-1 -2 -3 这样数的
      lrange key start stop
    指定返回第几个元素:指定取值
    lindex key index
    获取列表中的元素个数:
    llen key
    移除并返回列表key的头元素:从左往右取
      lpop key
    移除并返回列表的尾元素:从右往左取
    rpop key
    删除指定的元素:
    lrem key count value
    根据count 的值,删除列表中相应个数的value的元素,count的值可以是以下几种: count > 0:从表头开始向表尾搜索,移除与value相等的元素,数量为count。 count < 0:从表尾开始向表头搜索,移除与 value相等的元素,数量为count的绝对值。 count = 0:移除表中所有与value 相等的值。
     
    set集合(集合没有重复值)的操作
    添加元素
    sadd set value1 value2....
    查看元素
    smembers set
    移除元素
      srem set member...
    查看集合中的元素个数
    scard set
    获取多个集合的交集
      sinter set1 set2
    获取多个集合的并集
    sunion set1 set2
    获取多个集合的差集
    (以最左侧的set集合为基础进行的差集)
    sdiff set1 set2
     
     
    事务操作:Redis事务可以一次执行多个命令,事务具有以下特征:
    • 隔离操作:事务中的所有命令都会序列化、按顺序地执行,不会被其他命令打扰。
    • 原子操作:事务中的命令要么全部被执行,要么全部都不执行。
    开启一个事务:以后执行的所有命令,都在这个事务中执行的。
    multi
    执行事务:会将在multi和exec中的操作一并提交
    exec
    取消事务:回滚:会将multi后的所有命令取消。
    discard
    监视一个或者多个key:监视一个(或多个)key,如果在事务执行之前这个(或这些) key被其他命令所改动,那么事务将被打断。
    watch key...
    取消所有key的监视:
    unwatch
     
     
    发布/订阅操作:
    • 给某个频道发布消息:
    publish channel message
    • 订阅某个频道的消息:
    subscribe channel
    14.持久化
    redis提供了两种数据备份方式,一种是RDB,另外一种是AOF,以下将详细介绍这两种备份策略:vim /etc/redis.conf
     
      
    redis搭建主从
    1.拷贝一份redis配置文件为slave.conf
    cp redis.conf slave.conf
    2.编辑slave.conf文件
    vim slave.conf bind 192.168.7.100  (bind设置为自身ip   设置成127.0.0.1不能第三方登录) slaveof 192.168.7.100 6379    (从属于->) port 6380 (端口需不一致)
    redis-server   redis.conf   启动主
    redis-server   slave.conf 启动从
     注:同一台机器搭建,端口号不能相同,需要更改端口号,不同机器不需要
    redis集群
    redis集群我这里部署在一个机器上
    创建6个redis配置文件
    mkdir conf touch 7000.conf 7001.conf 7002.conf 7003.conf 7004.conf 7005.conf vim 7000.conf   #编辑文件并且把如下内容拷贝进去  或者cp 7000.conf 700{1..5}.conf (剩下的文件也是如此,把以下端口号及相应的文件修改即可)
    port 7000       #绑定端口 bind 192.168.254.41  #绑定对外连接提供的ip daemonize yes           #开启守护进程 pidfile 7000.pid          #进程文件名 cluster-enabled yes    #是否是集群 cluster-config-file 7000_node.conf    #集群配置文件 cluster-node-timeout 15000             #集群连接超时时间 appendonly yes                    #数据持久化类型
    启动服务 redis-server 7000.conf redis-server 7001.conf redis-server 7002.conf redis-server 7003.conf redis-server 7004.conf redis-server 7005.conf
     
    注:redis需要的Ruby版本最低是2.2.2,但是CentOS7 yum库中ruby的版本支持到 2.0.0,可gem 安装redis需要最低是2.2.2,采用rvm来更新ruby:
    安装RVM(rudy version manage)  1.curl -L get.rvm.io | bash -s stable  2.find / -name rvm -print(此时可能出现问题)  3.如果报错执行(4,5步)
     4.curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -  5.curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
     6.出现如下内容代表成功
        /usr/local/rvm
        /usr/local/rvm/src/rvm
        /usr/local/rvm/src/rvm/bin/rvm
        /usr/local/rvm/src/rvm/lib/rvm
        /usr/local/rvm/src/rvm/scripts/rvm
        /usr/local/rvm/bin/rvm
        /usr/local/rvm/lib/rvm
        /usr/local/rvm/scripts/rvm
    7.使刚安装的rvm立即生效   source /usr/local/rvm/scripts/rvm
    8.安装一个ruby版本   rvm install 2.4.1 9.使用一个ruby版本   rvm use 2.4.1 10.设置默认ruby版本   rvm use 2.4.1 --default
    11.配置集群  (尾部的1 为redis对应的备用机)
    redis-cli --cluster create 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 127.0.0.1:7007 127.0.0.1:7008 --cluster-replicas 1
     
     存入的数据时随机分布在三个主节点上,三个主机数据不互通,当主机死了,备用机
    会顶上去,不影响用户使用,当主机和备用机都死了,集群失败
     

  • 相关阅读:
    [最新]制作u盘引导安装ubuntu11.04
    js记录
    下面的代码有什么不妥之处
    Oracle常用命令
    蓝天下,献给你,html5
    无意义的小东西
    sql中,把varchar类型转换为int型,然后进行排序
    身边的人,来来去去
    不一定能写出来的求素数问题
    写在第一百篇博客之际
  • 原文地址:https://www.cnblogs.com/zgngg/p/10513027.html
Copyright © 2011-2022 走看看