Redis概述(一)

一、前言

  • Redis中的一致性hash算法

    一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义。

  1. 平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。
  2. 单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。
  3. 分散性(Spread):在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。
  4. 分散性(Spread):在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。
  • 环形Hash空间  

          在分布式集群中,对机器的添加删除,或者机器故障后自动脱离集群这些操作是分布式集群管理最基本的功能。

         如果采用常用的hash(object)%N算法,那么在有机器添加或者删除后,很多原有的数据就无法找到了,这样严重的违反了单调性原则。

          按照常用的hash算法来将对应的key哈希到一个具有2^32次方个桶的空间中,即0~(2^32)-1的数字空间中。现在我们可以将这些数字头尾相连,想象成一个闭合的环形。如下图

         

       

  •  平衡性

存储的数据要散列均匀

在一致性哈希算法中,为了尽可能的满足平衡性,其引入了虚拟节点

虚拟节点”( virtual node )是实际节点(机器)在 hash 空间的复制品( replica ),一实际个节点(机器)对应了若干个“虚拟节点”,这个对应个数也成为“复制个数”,“虚拟节点”在 hash 空间中以hash值排列

 “虚拟节点”的hash计算可以采用对应节点的IP地址加数字后缀的方式。例如假设NODE1IP地址为192.168.1.100。引入“虚拟节点”前,计算 cache A hash 值:

Hash(“192.168.1.100”);

引入“虚拟节点”后,计算“虚拟节”点NODE1-1NODE1-2hash值:

Hash(“192.168.1.100#1”); // NODE1-1

Hash(“192.168.1.100#2”); // NODE1-2

 

二、Redis的存储结构

 

     1.字符类型

       一个字符类型的key默认存储的最大容量是512M 。

       赋值:SET key  value

       取值: GET key

       递增数字: incr key

       原子性操作(线程安全的操作)

       递增指定的整数:incrby key increment 

       原子递减:decr key  

       向指定的key追加字符串:append key value  

       获得key对应的value的长度:strlen  key 

       同时获得多个keyvalue:mget  key key.. 

       同时设置多个key的值:mset key value  key value  key value …

       setnx(set  not  exist 的缩写):就是只有不存在的时候才设置,可以用它做一个redis的分布式锁

     2.散列类型

        hash key value  不支持数据类型的嵌套

       比较适合存储对象

       person

       age  18

       sex  

       name jack

       hset key field value

       hget key filed

       hmset key filed value [filed value …]  一次性设置多个值

       hmget key field field …  一次性获得多个值

       hgetall key  获得hash的所有信息,包括keyvalue

       hexists key field 判断字段是否存在。 存在返回1. 不存在返回0

       hincrby

       hsetnx

       hdel key field [field …] 删除一个或者多个字段

     3.列表类型 

        list, 可以存储一个有序可重复的字符串列表

        LPUSH/RPUSH: 从左边或者右边push数据

        LPUSH/RPUSH key value value

        {17 20 19 18 16

        llen num : 获得列表的长度

        lrange key  start stop  : 索引可以是负数, -1表示最右边的第一个元素

        lrem key count value   :count代表需要删除几个value

        lset key index value     :将列表 key 下标为 index 的元素的值设置为 value 

        LPOP/RPOP  :取数据

       应用场景:可以用来做分布式消息队列

     4.集合类型

        set list 不一样的点。 集合类型不能存在重复的数据。而且是无序的

        sadd key member [member ...] 增加数据; 如果value已经存在,则会忽略存在的值,并且返回成功加入的元素的数量

        srem key member  删除元素

        smembers key 获得所有数据

        sdiff key key …  对多个集合执行差集运算

        sunion 对多个集合执行并集操作, 同时存在在两个集合里的所有值

     5.有序集合

 

        Zadd  key score member :将一个或多个 member 元素及其 score 值加入到有序集 key 当中

        zrange key start stop [withscores] 去获得元素   withscores是可以获得元素的分数

        如果两个元素的score是相同的话,那么根据(0<9<A<Z<a<z) 方式从小到大

三、Redis的应用场景及安装

  • 应用场景

       1.数据缓存(商品数据、新闻、热点数据、过程数据

       2.单点登录

       3.秒杀、抢购

       4.网站访问排名

       5.应用的模块开发

  •  Redis的安装

      1.下载redis安装包

      2.wget http://download.redis.io/releases/redis-4.0.11.tar.gz

       3.tar -zxvf 安装包

       4.redis目录下 执行 make

       5.可以通过make test测试编译状态

       6.make install [prefix=/path]完成安装

  • Redis启动命令

      启动停止redis:     ./redis-server       ../redis.conf

      停止redis:            ./redis-cli shutdown

      以后台进程的方式启动,修改  redis.conf     daemonize =yes

      连接到redis的命令:   ./redis-cli -h 127.0.0.1 -p 6379

      Redis-server 启动服务

      Redis-cli 访问到redis的控制台

      redis-benchmark 性能测试的工具

      redis-check-aof aof文件进行检测的工具

      redis-check-dump  rdb文件检查工具

      redis-sentinel  sentinel 哨兵高可用方案

​​​​​​​

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值