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

posted @ 2019-03-11 20:39  疯狂的⑨酱  阅读(352)  评论(0编辑  收藏  举报