redis

来源:互联网 发布:c语言和java区别 编辑:程序博客网 时间:2024/05/18 02:27

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支持按位操作(getbitsetbitbitopbitcount),可以用来实现一个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(是否成员)
 

(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.AB合分片算法的数据复制到C
4.待全部复制完成,Diamond的配置
5.应用获取新的配置
6.删除AB不需要的数据

 

 

 10、Redis持久化

Redis的持久化方式有两种

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

   

 * AOF
Ø将执行命令按照字符串格式存放
Ø录服务器执行的所有写操作命
Ø服务器启动时,通过重新执行这些命令来还原数据

      实例灾难恢复的时候,先加载RDB,然后解析AOF文件,应用增量数据

 

 

11、Redis主从复制

(1)Redis是通过slaveof命令
          Ø1.连接到从库上
          Ø2.发起slaveof ip port命令(ipport为主库的ipport
          Ø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
          自动切换,无需人工干

  缺点:

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

          

 

    

 

0 0
原创粉丝点击