欢迎投稿

今日深度:

Redis,

Redis,


  • Redis
    • 准备工作
    • 概述
    • 配置
    • Linux上安装Redis
    • Redis客户端
    • Redis的5中数据类型
    • Redis的持久化方案
    • Redis集群
      • Redis集群架构图
      • 节点机制
      • Redis集群节点和槽的关系
      • Redis集群的搭建
    • Redis客户端连接Redis集群
    • Java代码连接Redis
      • 单机版
      • 单机版使用连接池
      • 集群版
    • Redis和Spring整合

Redis

准备工作

下载redis

概述

Redis中所有的数据都是字符串。命令不区分大小写,key是区分大小写的。Redis是单线程的。Redis中不适合保存内容大的数据,Redis一般用来做缓存,减轻数据库压力,提高查询速度,redis有16个数据库,默认用的0号数据库。

配置

详细配置可参见菜鸟教程

Linux上安装Redis

Redis客户端

./redis-cli -h ip -p port

连接redis:./redis-cli -h 192.168.13.3 -p 6379

Redis的5中数据类型


hincrby:
1. 该命令用于为哈希表中的字段值加上指定增量值。
2. 增量也可以为负数,相当于对指定字段进行减法操作
3. 如果哈希表的 key 不存在,一个新的哈希表被创建并执行 hincrby 命令
4. 如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0

Redis的持久化方案

Redis的所有数据都是保存到内存中的,有可能会丢失数据。

Redis集群

Redis集群架构图

节点机制

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

Redis集群节点和槽的关系

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

Redis集群的搭建

Redis集群节点之间采用投票机制确定节点是否正常工作,必须有一半以上的节点投票才能确定一个已经坏掉的节点,因此redis集群最少必须有3个节点,为了实现高可用,每个节点又必须最少有一个备份节点,所以一个高可用的redis集群,最少需要6个节点,即6个redis实例。

Redis客户端连接Redis集群

./redis-cli -h ip -p port -c

Java代码连接Redis

单机版

    @Test
    public void testJedisSingle() throws Exception {
        Jedis jedis = new Jedis("192.168.13.3", 6379);
        jedis.set("mytest", "1000");
        String result = jedis.get("mytest");
        System.out.println(result);
        jedis.close();
    }

单机版使用连接池

    @Test
    public void testJedisPool() throws Exception {
        //创建一个连接池对象
        JedisPool jedisPool = new JedisPool("192.168.13.3", 6379);
        //从连接池获得连接
        Jedis jedis = jedisPool.getResource();
        String result = jedis.get("mytest");
        System.out.println(result);
        //每次jedis使用完毕后需要关闭,连接池回收资源。
        jedis.close();
        //系统结束前关闭连接池
        jedisPool.close();
    }

集群版

    @Test
    public void testJedisCluster() throws Exception {
        //连接集群使用JedisCluster对象
        Set<HostAndPort> nodes = new HashSet<>();
        nodes.add(new HostAndPort("192.168.13.3", 7001));
        nodes.add(new HostAndPort("192.168.13.3", 7002));
        nodes.add(new HostAndPort("192.168.13.3", 7003));
        nodes.add(new HostAndPort("192.168.13.3", 7004));
        nodes.add(new HostAndPort("192.168.13.3", 7005));
        nodes.add(new HostAndPort("192.168.13.3", 7006));
        //系统中可以是单例
        JedisCluster jedisCluster = new JedisCluster(nodes);
        jedisCluster.set("jediscluster", "123456");
        String result = jedisCluster.get("jediscluster");
        System.out.println(result);
        //系统结束前关闭JedisCluster
        jedisCluster.close();
    }

Redis和Spring整合

单机版连接池配置

    <!-- 单机版 -->
    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="host" value="192.168.13.3"/>
        <constructor-arg name="port" value="6379"/>
    </bean>
    <bean id="jedisClientPool" class="com.mydeertrip.jedis.JedisClientPool"/>

集群版配置

<bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
        <constructor-arg name="nodes">
            <set>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.13.3"/>
                    <constructor-arg name="port" value="7001"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.13.3"/>
                    <constructor-arg name="port" value="7002"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.13.3"/>
                    <constructor-arg name="port" value="7003"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.13.3"/>
                    <constructor-arg name="port" value="7004"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.13.3"/>
                    <constructor-arg name="port" value="7005"/>
                </bean>
                <bean class="redis.clients.jedis.HostAndPort">
                    <constructor-arg name="host" value="192.168.13.3"/>
                    <constructor-arg name="port" value="7006"/>
                </bean>
            </set>
        </constructor-arg>
    </bean>
    <bean id="jedisClientCluster" class="com.mydeertrip.content.jedis.JedisClientCluster"/>

www.htsjk.Com true http://www.htsjk.com/redis/26437.html NewsArticle Redis, Redis 准备工作 概述 配置 Linux上安装Redis Redis客户端 Redis的5中数据类型 Redis的持久化方案 Redis集群 Redis集群架构图 节点机制 Redis集群节点和槽的关系 Redis集群的搭建 Redis客户端连...
相关文章
    暂无相关文章
评论暂时关闭