Redis集群集成Spring在Java中的使用详解编程语言

Redis集群集成Spring在Java中的使用详解编程语言

    今天测试一下在Java中如何使用redis缓存一些东西。与spring是如何结合在一起的。封装一个操作redis的工具类,供项目中使用。


一:首先要把jedis依赖的jar包加上。


二:和spring做集成。

    在spring配置文件中添加redis配置。(三主三从,7001-7002是主,7003-7005是从)

        <!– 配置redis客户端集群版 –>  

        <bean id=”jedisCluster” class=”redis.clients.jedis.JedisCluster”>  

                            <constructor-arg>

                                <set>

                                    <bean class=”redis.clients.jedis.HostAndPort”>

                                        <constructor-arg name=”host” value=”192.168.0.199″/>

                                        <constructor-arg name=”port” value=”7000″/>

                                    </bean>                                         

                                    <bean class=”redis.clients.jedis.HostAndPort”>  

                                        <constructor-arg name=”host” value=”192.168.0.199″/>

                                        <constructor-arg name=”port” value=”7001″/>

                                    </bean>                                         

                                    <bean class=”redis.clients.jedis.HostAndPort”>  

                                        <constructor-arg name=”host” value=”192.168.0.199″/>

                                        <constructor-arg name=”port” value=”7002″/>

                                    </bean>                                         

                                    <bean class=”redis.clients.jedis.HostAndPort”>  

                                        <constructor-arg name=”host” value=”192.168.0.17″/>

                                        <constructor-arg name=”port” value=”7003″/>

                                    </bean>                                         

                                    <bean class=”redis.clients.jedis.HostAndPort”>  

                                        <constructor-arg name=”host” value=”192.168.0.17″/>

                                        <constructor-arg name=”port” value=”7004″/>

                                    </bean>                                         

                                    <bean class=”redis.clients.jedis.HostAndPort”>  

                                        <constructor-arg name=”host” value=”192.168.0.17″/>

                                        <constructor-arg name=”port” value=”7005″/>

                                    </bean>

                                </set>

                            </constructor-arg>

        </bean>  

        <bean id=”jedisClientCluster” class=”net.itxm.JedisClientCluster”/>


三:接口和实现类        

    封装redis的一些常用操作(存储String 类型,获取String类型,设置过期时间,删除hash数据等等)


    1.接口类如下:

           /**  

         * redis操作接口

         * @author itxm  

         *  

         */  

            public interface JedisClient {

                String set(String key, String value);

                String get(String key);

                Long hset(String key, String item, String value);

                String hget(String key, String item);

                Long incr(String key);

                Long decr(String key);

                Long expire(String key, int second);

                Long ttl(String key);

                Long hdel(String key, String item);

            }


    2.接口实现类如下:        

        /**  

         * redis操作工具接口实现类  

         * @author itxm  

         *  

         */  

        public class JedisClientCluster implements JedisClient{  

            //注入jedisCluster  

            @Autowired  

            private JedisCluster jedisCluster;  

          

            /**  

             * 设置String数据类型  

             *   

             * @param key  

             * @param value  

             * @return  

             */  

            @Override  

            public String set(String key, String value) {  

                return jedisCluster.set(key, value);  

            }  

          

            /**  

             * 获取String数据类型  

             *   

             * @param key  

             * @return  

             */  

            @Override  

            public String get(String key) {  

                return jedisCluster.get(key);  

            }  

              

            /**  

             * 设置hash数据类型  

             *   

             * @param key  

             * @param item  

             * @param value  

             * @return  

             */  

            @Override  

            public Long hset(String key, String item, String value) {  

                return jedisCluster.hset(key, item, value);  

            }  

              

            /**  

             * 获取hash数据类型  

             *   

             * @param key  

             * @param item  

             * @return  

             */  

            @Override  

            public String hget(String key, String item) {  

                return jedisCluster.hget(key, item);  

            }  

              

            /**  

             * 删除hash数据  

             * @param key  

             * @param item  

             * @return  

             */  

            @Override  

            public Long incr(String key) {  

                return jedisCluster.incr(key);  

            }  

              

            /**  

             * 加一操作  

             *   

             * @param key  

             * @return  

             */  

            @Override  

            public Long decr(String key) {  

                return jedisCluster.decr(key);  

            }  

              

            /**  

             * 减一操作  

             *   

             * @param key  

             * @return  

             */  

            @Override  

            public Long expire(String key, int second) {  

                return jedisCluster.expire(key, second);  

            }  

              

            /**  

             * 设置key的过期时间  

             *   

             * @param key  

             * @param second  

             * @return  

             */  

            @Override  

            public Long ttl(String key) {  

                return jedisCluster.ttl(key);  

            }  

              

            /**  

             * 判断key是否过期  

             *   

             * @param key  

             * @return  

             */  

            @Override  

            public Long hdel(String key, String item) {  

                 return jedisCluster.hdel(key, item);  

            }  

          

        }  


四:编写测试类进行测试

        @Test  

        public void testJedisClientSpring() throws Exception {  

            //创建一个spring容器  

            ApplicationContext applicationContext = new ClassPathXmlApplicationContext(“classpath:config/spring/applicationContext*.xml”);  

            //从容器中获得JedisClient对象  

            JedisClient jedisClient = applicationContext.getBean(JedisClient.class);  

            //jedisClient操作redis  

            jedisClient.set(“cliet1”, “500”);  

            String string = jedisClient.get(“cliet1”);  

            System.out.println(string);  

        }  


五:测试结果:

    500


六:总结

    不知道大家有没有疑问搭建redis集群的时候就是我往客户端配置了这么多节点,往redis中缓存数据的时候,它怎么知道该缓存到哪个服务器上呢?在这里我简单的说一下,Redis 集群中内置了16384 个哈希槽,搭建集群时,每台服务器上已经分配了固定的哈希槽编号。当需要在 Redis 集群中放置一个key-value(数据) 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据求余的结果,把数据映射到不同的redis服务器上。

Redis集群集成Spring在Java中的使用详解编程语言

转载请注明来源网站:blog.ytso.com谢谢!

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/14608.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论