您的位置:首页 > 数据库 > Redis

redis

2015-11-13 12:13 639 查看
1、什么是redis

目前数据库产品主要分下面两类:

uRDBMS: Oracle , Mysql
uNosql

     * KVRAM存储:Redis,MemcacheDB

     * 图形存储: Neo4j

     * 列式存储: Hbase,Cassandra

     * 文档存储: MongDB

Redis: key-value形式的NoSQL服务

 

 

2、redis特点及优势

Redis:使用很大内存,提供快速读写。



优势

1.  高性能的key-value存储系统,数据存储在内存

2.  Master-slave主从同步,数据持久化

3.  支持多种数据类型 (String ,Hash ,List ,Set ,Zset)

4.  支持事务

5.  支持消息的订阅和发布机制

 

 

3、Redis安装

Redis的安装简单,部署轻量级

Linux平台

$wget http://download.redis.io/releases/redis-2.8.3.tar.gz
$ tar xzfredis-2.8.3.tar.gz

$ cdredis-2.8.3

$ make

Windows平台

官网不支持windows平台,但是可以在下面网站下载

https://github.com/MSOpenTech/redis下载,版本为2.6

redis-2.6.zip

 

 

4、Redis启停

Linux启动:

$redis-server $REDIS_DATA/conf/redis.conf

Windows启动:

$redis-server –-console

Windows && Linux停止:

$redis-cli –p port –a passwd shutdown

 

 

5、Redis常用命令

uredis-benchmark -- Redis性能测试工具
uredis-check-aof -- Redis aof日志检查工具
uredis-check-dump – Redis rdb文件检查工具
uredis-cli-- Redis命令行操作工具
uredis-server-- Redis服务器的daemon启动程序
 
 
 
6、Redis客户端

Redis的客户端很丰富,几乎所有流行的语言都有其客户端

uJava-- Jedis
uC --credis/hiredis/libredis
uNode.js -- node_redis
uPerl  -- Redis
uPHP -- Predis /phpredis
uPython -- redis-py
uRuby -- redis-rb
 

 
 
7、 Redis数据类型     

(1)String  

          * String是最常用的一种数据类型,普通的key/ value存储都可以归为此类
          * 由于string型的value支持按位操作(getbit,setbit,bitop,bitcount),可以用来实现一个bitmap
          * 原子操作用来实现全局计数器(incr),避免业务自己实现加锁等功能
          * 条件操作:set nx|xx是实现全局互斥,信号量之类的利器
    
        String 常用命令:set,get,strlen,mset,mget,del,keys,substr,incr key,incrby key value,decr key,decrby key value,append key value
 
(2) Hash

             *  简单的用hash分割命名空间,防止key冲突,这种情况下和string的使用场景基本一样(除了不再原生支持位运算)

             *  一个hash表(key)表示一个业务对象,hash
field对应字段,非常简单直白,比如我们要存储一个用户信息对象数据,包含以下信息:用户ID为查找的key,存储的value用户对象包含姓名,年龄,性别等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式
          


              Hash常用命令:hkeys,hset,hget,hvals,hgetall,hdel,hmget,hmset

 

(3) List

            *  业务中有先后顺序的所有列表都可以用List很好的表示

            * 先进后出的队列+阻塞读操作,可以很方便实现 “生产者,消费者”这类问题,通常用于解耦应用程序的不同模块

            * 单向队列,双向队列,循环队列,各种队列

 

            List 常用命令:Lpush,Llen,Lpop,Lrange key 0 -1,linsert key before "xx" "yy"

 

(4) Set

            *  当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择

            *  set提供了判断某个成员是否在一个set集合内
            *  可以存储一些集合性的数据,比如在天下通应用中,可以将一个用户所有的好友存在一个集合中,可以非常方便的实现如共同关注、共同喜好等
            需要随机操作的场合:   
                Ø抽奖
                Ø推荐系统(随机补足几条数据同时避免重复)
 
            Set 常用命令:sadd,smembers,srem(删除),sunion key1,key2(合并),scard(元素基数),sismember key value
e1e0
(是否成员)
 
(5) Zset

           *  优先级队列(优先级作为score)
           *  中小量数据快速在线排序
           *  TopN,热榜,头条 等类似业务功能的实现
            

               Zset常用命令:zadd key score member,zcard(个数),zrem key member (删除member)

                                           zrange key 0 -1 withscore,zcount key min max (score 在min和max之间的个数)

                                           zrank key member (member的排序:从小到大,排序从0开始)

                                           zrevrange key 0 -1 [withscore] :与zrange相反,从大到小

 

 

8、Redis开发注意事项

(1)选择合适的数据结构
(2)合理的设定key的过期时间
(3)合理规划key的命名规则

 

 

9、Redis扩展

(1)纵向扩展:

         *  若当前实例的内存可以满足实例的需要:在线修改实例的配置文件中的maxmemory,无需停应用

         * 
若当前实例的内存不能再分配 :  那就需要将实例迁移到新的机器上

Steps

1.手动在管理平台增加新的实例配置信息
2.启动OSAgent
3.发起新实例跟旧实例的同步
4.待全部复制完成,更新Diamond的配置
5.应用配置获取新配置
 
(2)横线扩展

Steps

1.手动修改HIDBA中的应用对应实例配置信息
2.启动OSAgent
3.将A,B符合分片算法的数据复制到C
4.待全部复制完成,更新Diamond的配置
5.应用获取新的配置
6.删除A,B不需要的数据

 

 

 10、Redis持久化

Redis的持久化方式有两种

 *  RDB
Ø  将内存快照按照二进制格式存放
Ø  可以在指定的时间间隔内生成数据集的时间点快照
   

 * AOF:
Ø将执行命令按照字符串格式存放
Ø记录服务器执行的所有写操作命令
Ø在服务器启动时,通过重新执行这些命令来还原数据集
      实例灾难恢复的时候,先加载RDB,然后解析AOF文件,应用增量数据

 

 

11、Redis主从复制

(1)Redis是通过slaveof命令来操作

          Ø1.连接到从库上
          Ø2.发起slaveof ip port
命令(ip和port为主库的ip和port)
          Ø3.若主库设置的密码,需要在从库上设置认证密码

(2)Redis的主从复制策略是通过RDB的持久化来实现

(3)若主从同步一致后,后续只同步增量数据

(4)断开主从复制的命令         

           Ø1.连接到从库上
           Ø2.发起slaveof no one
 
 
 
12、Redis 平台服务模式
(1)redis 单实例(主)      ----适用场景:缓存
(2)redis 一主一备             -----适用场景:数据持久化,能恢复数据
(3)redis 一主多从             -----适用场景:读量很大的缓存
(4)redis 一主多从一备     -----适用场景:读量很大,可靠性要求很高
 
 
 
 
13、Redis高可用性方案
(1)使用keepalived做高可用
          * 实现原理:           

                     Ø正常情况下VIP连接在Master
                     Ø当Master发生故障时,VIP漂移到Slave上同时Slave变为Master
                     Ø当Master实例启动时,VIP任然在原slave上,此时需要手动从原slave同步数据
                     Ø待数据同步完成,重启原slave,此时VIP漂移到Master上

          * 使用场景:
                     适用于一主一备(备不提供服务),数据会丢失

          * 特点:

                     优点:使用VIP,主备实例切换对业务透明

                     缺点:同一个网段使用不同的虚拟的路由ID,范围

 

(2)平台的高可用

   故障恢复步骤:

           1.Osagent 启动原主库
           2.发起主从复制,数据一致时
           3.并通知Diamond修改配置
           4.APP获取最新配置
           5.应用数据写本地缓存
           6.断开主从复制,反向同步
  优点:

          不使用vip
          自动切换,无需人工干越
  缺点:

          若开启本地缓存,会有出现脏读,若不开启本地缓存,应用端写会报错
          使用于弱一致性的应用
          

 

    

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: