zoukankan      html  css  js  c++  java
  • Redis-Java 交互的应用

    一、首先介绍一下Redis

          Redis是目前业界使用最广泛的内存数据存储。相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化。除此之外,Redis还提供一些类数据库的特性,比如事务,HA,主从库。可以说Redis兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。本文介绍Redis在Spring Boot中典型的应用场景。

           Redis缓存数据类型有5种,分别是String(字符串)、List(列表)、Hash(哈希)、Set(无序,不重复集合)、ZSet(sorted set:有序,不重复集合)。

    二、先下载redis  我这里使用的是window64 版本

      这是教程链接: http://blog.csdn.net/jinwufeiyang/article/details/52156817

      Redis 下载链接 :https://github.com/MicrosoftArchive/redis/releases

     

         双击图上的标记的 ,如成功便如图下

     

     三、下面介绍java如何配置

        这是我的项目结构

            

            首先pom中引入jar包

       

      <!--共享Session-spring-session-data-redis分布式系统中,
             sessiong共享有很多的解决方案,其中托管到缓存中应该是最常用的方案之一-->
            <dependency>
                <groupId>org.springframework.session</groupId>
                <artifactId>spring-session-data-redis</artifactId>
            </dependency>

        

           application.properties 配置

        

    # default-store in spring session. it will be set in redis only outside.
    spring.session.store-type=none
    # REDIS (RedisProperties)
    # Redis数据库索引(默认为0)
    spring.redis.database=0  
    # Redis服务器地址
    spring.redis.host=127.0.0.1
    # Redis服务器连接端口
    spring.redis.port=6379  
    # Redis服务器连接密码(默认为空)
    spring.redis.password=
    # 连接池最大连接数(使用负值表示没有限制)
    spring.redis.pool.max-active=8  
    # 连接池最大阻塞等待时间(使用负值表示没有限制)
    spring.redis.pool.max-wait=-1  
    # 连接池中的最大空闲连接
    spring.redis.pool.max-idle=8  
    # 连接池中的最小空闲连接
    spring.redis.pool.min-idle=0  
    # 连接超时时间(毫秒)
    spring.redis.timeout=0  

      

         RedisController 配置

    @RestController
    public class RedisController {
    
        @Autowired
        private RedisServiceImpl service;
    
        //添加
        @RequestMapping(value = "/add", method = RequestMethod.GET)
        public void test() {
            System.out.println("start.....");
            RedisModel m = new RedisModel();
            m.setName("张三");
            m.setTel("1111");
            m.setAddress("深圳1");
            m.setRedisKey("zhangsanKey01");
            service.put(m.getRedisKey(), m, -1);
    
            RedisModel m2 = new RedisModel();
            m2.setName("张三2");
            m2.setTel("2222");
            m2.setAddress("深圳2");
            m2.setRedisKey("zhangsanKey02");
            service.put(m2.getRedisKey(), m2, -1);
    
            RedisModel m3 = new RedisModel();
            m3.setName("张三3");
            m3.setTel("2222");
            m3.setAddress("深圳2");
            m3.setRedisKey("zhangsanKey03");
            service.put(m3.getRedisKey(), m3, -1);
    
            System.out.println("add success end...");
        }
    
        //查询所有对象
        @RequestMapping(value = "/getAll", method = RequestMethod.GET)
        @ResponseBody
        public Object getAll() {
            return service.getAll();
        }
    
        //查询所有key
        @RequestMapping(value = "/getKeys", method = RequestMethod.GET)
        @ResponseBody
        public Object getKeys() {
            return service.getKeys();
        }
    
        //根据key查询
        @RequestMapping(value = "/get", method = RequestMethod.GET)
        public Object get(String key) {
            RedisModel m = new RedisModel();
            m.setRedisKey(key);
            return service.get(m.getRedisKey());
        }
    
        //删除
        @RequestMapping(value = "/remove", method = RequestMethod.GET)
        @ResponseBody
        public void remove() {
            RedisModel m = new RedisModel();
            m.setRedisKey("zhangsanKey01");
            service.remove(m.getRedisKey());
        }
    
        //判断key是否存在
        @RequestMapping(value = "/isKeyExists", method = RequestMethod.GET)
        @ResponseBody
        public void isKeyExists() {
            RedisModel m = new RedisModel();
            m.setRedisKey("zhangsanKey01");
            boolean flag = service.isKeyExists(m.getRedisKey());
            System.out.println("zhangsanKey01 是否存在: "+flag);
        }
    
        //查询当前缓存的数量
        @RequestMapping(value = "/count", method = RequestMethod.GET)
        @ResponseBody
        public Object count() {
            return service.count();
        }
    
        //清空所有key
        @RequestMapping(value = "/empty", method = RequestMethod.GET)
        @ResponseBody
        public void empty() {
            service.empty();
        }
    IRedisService 配置
    public abstract class IRedisService<T> {
    
    
        @Autowired
        protected RedisTemplate<String, Object> redisTemplate;
        @Resource
        protected HashOperations<String, String, T> hashOperations;
    
        /**
         * 存入redis中的key
         *
         * @return
         */
        protected abstract String getRedisKey();
    
    
        /**
         * 添加
         *
         * @param key    key
         * @param doamin 对象
         * @param expire 过期时间(单位:秒),传入 -1 时表示不设置过期时间
         */
        public void put(String key, T doamin, long expire) {
            hashOperations.put(getRedisKey(), key, doamin);
            if (expire != -1) {
                redisTemplate.expire(getRedisKey(), expire, TimeUnit.SECONDS);
            }
        }
    
        /**
         * 删除
         *
         * @param key 传入key的名称
         */
        public void remove(String key) {
            hashOperations.delete(getRedisKey(), key);
        }
    
        /**
         * 查询
         *
         * @param key 查询的key
         * @return
         */
        public T get(String key) {
            return hashOperations.get(getRedisKey(), key);
        }
    
        /**
         * 获取当前redis库下所有对象
         *
         * @return
         */
        public List<T> getAll() {
            return hashOperations.values(getRedisKey());
        }
    
        /**
         * 查询查询当前redis库下所有key
         *
         * @return
         */
        public Set<String> getKeys() {
            return hashOperations.keys(getRedisKey());
        }
    
        /**
         * 判断key是否存在redis中
         *
         * @param key 传入key的名称
         * @return
         */
        public boolean isKeyExists(String key) {
            return hashOperations.hasKey(getRedisKey(), key);
        }
    
        /**
         * 查询当前key下缓存数量
         *
         * @return
         */
        public long count() {
            return hashOperations.size(getRedisKey());
        }
    
        /**
         * 清空redis
         */
        public void empty() {
            Set<String> set = hashOperations.keys(getRedisKey());
            set.stream().forEach(key -> hashOperations.delete(getRedisKey(),key));
        }

      RedisServiceImpl 配置

    @Service
    public class RedisServiceImpl extends IRedisService<RedisModel> {
    
        private static final String REDIS_KEY = "TEST_REDIS_KEY";
    
        @Override
        protected String getRedisKey() {
    
    
            return this.REDIS_KEY;
        }
    }

    RedisModel 配置

    public class RedisModel implements Serializable {
    
    
        private String redisKey;//redis中的key
        private String name;//姓名
        private String tel;//电话
        private String address;//住址
    
        public String getRedisKey() {
            return redisKey;
        }
    
        public void setRedisKey(String redisKey) {
            this.redisKey = redisKey;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getTel() {
            return tel;
        }
    
        public void setTel(String tel) {
            this.tel = tel;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }

       

      RedisConfig配置

      

    @Configuration
    public class RedisConfig  {
    
        /**
         * 注入 RedisConnectionFactory
         */
        @Autowired
        RedisConnectionFactory redisConnectionFactory;
    
        /**
         * 实例化 RedisTemplate 对象
         *
         * @return
         */
        @Bean
        public RedisTemplate<String, Object> functionDomainRedisTemplate() {
            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
            initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
            return redisTemplate;
        }
    
        /**
         * 设置数据存入 redis 的序列化方式
         *
         * @param redisTemplate
         * @param factory
         */
        private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
            redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
            redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
            redisTemplate.setConnectionFactory(factory);
        }
    
        /**
         * 实例化 HashOperations 对象,可以使用 Hash 类型操作
         *
         * @param redisTemplate
         * @return
         */
        @Bean
        public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
            return redisTemplate.opsForHash();
        }
    
        /**
         * 实例化 ValueOperations 对象,可以使用 String 操作
         *
         * @param redisTemplate
         * @return
         */
        @Bean
        public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
            return redisTemplate.opsForValue();
        }
    
        /**
         * 实例化 ListOperations 对象,可以使用 List 操作
         *
         * @param redisTemplate
         * @return
         */
        @Bean
        public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
            return redisTemplate.opsForList();
        }
    
        /**
         * 实例化 SetOperations 对象,可以使用 Set 操作
         *
         * @param redisTemplate
         * @return
         */
        @Bean
        public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
            return redisTemplate.opsForSet();
        }
    
        /**
         * 实例化 ZSetOperations 对象,可以使用 ZSet 操作
         *
         * @param redisTemplate
         * @return
         */
        @Bean
        public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
            return redisTemplate.opsForZSet();
        }

       

         Redis  实现session 共享  sessionConfig 配置

    @Configuration
    @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
    public class SessionConfig {
    }

         调用方法

    HttpSession session
    session.setAttribute("data", "Session 共享 9966"); String name = "端口号:9966========="+ session.getAttribute("data");

       分别运行两个一样的配置 session 就共享了

         源码  良心制作 :https://gitee.com/xdymemory00/FuZaiJunHeng_Redis_session-GongXiang

         nginx +Redis window64 版本工具:https://gitee.com/xdymemory00/Redis_Nginx-GongJu.git

    运行之后收工!!!!!!!!!!
  • 相关阅读:
    Git clone The requested URL returned error: 403 错误
    创建DOTA2本地数据库(一)
    如何打开VPK文件?里面究竟有什么?
    DOTA 2 API(个人资料)
    新的博客,新的开始!
    你应该在开始API开发之前知道的事(下)(翻译)
    你应该在开始API开发之前知道的事(上)(翻译)
    DOTA 2 Match History WebAPI(翻译)
    C#中UnixTime和DateTime的转换(转载)
    搜查令中期总结
  • 原文地址:https://www.cnblogs.com/memoryXudy/p/7799704.html
Copyright © 2011-2022 走看看