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
 
 存入的数据时随机分布在三个主节点上,三个主机数据不互通,当主机死了,备用机
会顶上去,不影响用户使用,当主机和备用机都死了,集群失败
相关文章
相关标签/搜索