精华内容
下载资源
问答
  • Java操作Redis缓存

    2018-10-30 20:42:20
    Redis缓存 一.注解 @EnableCaching 在SpringRedisApplication类中加添加,开启高速缓存. @Cacheable(value = “roleService”, key = “#roleId”) 在service实现类中的方法上添加,表示给某个方法开启缓存, 后面...

    Redis缓存

    一.注解

    1. @EnableCaching 在SpringRedisApplication类中加添加,开启高速缓存.

    2. @Cacheable(value = “roleService”, key = “#roleId”)
      在service实现类中的方法上添加,表示给某个方法开启缓存,
      后面的key就是在返回值中拿到插入之后的数据,是在redis中的缓存中拿到的,
      不用再查询数据库.

    3. @CachePut(value = “roleService”, key = “#roleInfo.roleId”),
      在执行插入操作的时候,直接把插入的数据存到redis缓存中,查数据时,直接缓存中取数据.

    4. @CacheEvict(value = “roleService”, allEntries = true),
      在执行删除操作的时候,会把缓存中的所有缓存清空.

    5. @GeneratedValue(strategy = GenerationType.IDENTITY),
      给实体类属性id列设置为主键,自增长.

    二.缓存具体实现(附加点赞demo)

    1. 在SpringRedisApplication类中加上注解: @EnableCaching

    2. 创建entity层,代码如下:

       import javax.persistence.*;
        import java.io.Serializable;
      
        @Entity
       @Table(name = "role_info")
        public class RoleInfo implements Serializable {
      
       	@Id
       	 @GeneratedValue(strategy = GenerationType.IDENTITY)
       	 private Long roleId;
       	private String name;
      
       	@Override
       	public String toString() {
      		 return "RoleInfo{" +
               "roleId=" + roleId +
               ", name='" + name + '\'' +
               '}';
        }
      
       public Long getRoleId() {
         return roleId;
       }
      
         public void setRoleId(Long roleId) {
          this.roleId = roleId;
         }
      
      
        public String getName() {
      	 return name;
      }
      
      public void setName(String name) {
          this.name = name;
         }
      
         }
      
    3. 创建mapper层,代码如下:

        import org.springframework.data.jpa.repository.JpaRepository;
      
        public interface RoleMapper extends JpaRepository<RoleInfo,Long> {
      
      
        }
      
    4. 创建service层,代码如下:

       public interface RoleService {
      
       List<RoleInfo> findAll();
      
       RoleInfo findOne(Long l);
      
       RoleInfo addOne(RoleInfo roleInfo);
      
       Boolean delete(Long roleId);
      
       public boolean thumb(Long roleId);
      
       public Set<?> thumbList();
      
      }
      

      service层实现类如下:

        @Service
        public class RoleServiceImpl implements RoleService {
      
       @Autowired
       private RoleMapper mapper;
      
       @Resource
       private RedisTemplate<Object, Object> redisTemplate;
      
       @Cacheable(value = "roleService")
       @Override
       public List<RoleInfo> findAll() {
           System.out.println("RoleServiceImpl.findAll");
           List<RoleInfo> all = this.mapper.findAll();
           return all;
       }
      
       @Cacheable(value = "roleService", key = "#roleId")
       @Override
       public RoleInfo findOne(Long l) {
           System.out.println("RoleServiceImpl.findOne");
           RoleInfo one = this.mapper.findById(l).get();
           return one;
       }
      
       // 这个key是重返回值中拿到插入之后的数据,是在redis中的缓存中拿到的
       @CachePut(value = "roleService", key = "#roleInfo.roleId")
       @Override
       public RoleInfo addOne(RoleInfo roleInfo) {
           System.out.println("RoleServiceImpl.addOne");
           RoleInfo save = this.mapper.save(roleInfo);
           return save;
       }
      
       // 清空所有缓存(卡死以为的,奥恩退思)
       @CacheEvict(value = "roleService", allEntries = true)
       @Override
       public Boolean delete(Long roleId) {
           System.out.println("RoleServiceImpl.delete");
           this.mapper.deleteById(roleId);
           return true;
       }
       
       // 点赞demo
       public boolean thumb(Long roleId) {
           ZSetOperations<Object, Object> forZSet = this.redisTemplate.opsForZSet();
           // 根据roleId查询信息.
           RoleInfo one = findOne(roleId);
           // 向redis缓存中缓存对象,每次刷新网页赞+1
           forZSet.incrementScore("thumb:roleId", one, 1);
           return true;
       }
      
       public Set<?> thumbList() {
           ZSetOperations<Object, Object> opsForZSet = this.redisTemplate.opsForZSet();
           // 根据key取出缓存中的数据,并排序,赞多的在前面.
           Set<ZSetOperations.TypedTuple<Object>> scores =
                   opsForZSet.reverseRangeWithScores("thumb:roleId", 0, 2);
           return scores;
       }
      
    5. 创建controller层,代码如下:

       import com.lanou3g.springredis.RoleService.RoleService;
       import com.lanou3g.springredis.entity.RoleInfo;
       import org.springframework.web.bind.annotation.PathVariable;
       import org.springframework.web.bind.annotation.RequestMapping;
       import org.springframework.web.bind.annotation.RestController;
       import javax.annotation.Resource;
       import java.util.List;
       import java.util.Set;
      
      
       @RestController
       @RequestMapping("/role")
       public class RoleController {
      
       @Resource
       private RoleService roleService;
      
       @RequestMapping("/findAll")
       public List<RoleInfo> findAll() {
           List<RoleInfo> all = this.roleService.findAll();
           System.out.println(all + "**********");
           return all;
       }
      
       @RequestMapping("/findOne/{roleId}")
       public RoleInfo findOne(@PathVariable Long roleId) {
           RoleInfo one = this.roleService.findOne(roleId);
           return one;
       }
      
       @RequestMapping("/addOne")
       public Boolean addOne(RoleInfo roleInfo) {
           this.roleService.addOne(roleInfo);
           return true;
       }
      
       @RequestMapping("/delete/{roleId}")
       public Boolean delete(@PathVariable Long roleId) {
           return this.roleService.delete(roleId);
       }
      
       @RequestMapping("/like/{roleId}")
       public boolean like(@PathVariable Long roleId) {
           return this.roleService.thumb(roleId);
       }
      
       @RequestMapping("/thumbList")
       public Set<?> thumbList() {
           Set<?> set = this.roleService.thumbList();
           return set;
       }
      

      }

    6. 创建配置文件类,代码如下:

       import com.fasterxml.jackson.databind.ObjectMapper;
       import org.springframework.context.annotation.Bean;
       import org.springframework.context.annotation.Configuration;
       import org.springframework.data.redis.connection.RedisConnectionFactory;
       import org.springframework.data.redis.core.RedisTemplate;
       import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
      
       import java.text.SimpleDateFormat;
      
       @Configuration
       public class RedisConfig {
      
       @Bean
       public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
           RedisTemplate<Object, Object> template
                   = new RedisTemplate<>();
           template.setConnectionFactory(factory);
           // 定制Jackson
           ObjectMapper mapper = new ObjectMapper();
           mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"));
           Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
           // 把value序列化成json格式.
           template.setValueSerializer(serializer);
           template.setKeySerializer(serializer); // 转json
           // 文件里的配置也会加载.
           template.afterPropertiesSet();
           return template;
       }
      
       }
      
    7. application.yml配置文件如下:

      spring:
      datasource:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/netctoss
      username: root
      password: root
      #最大活跃数
      maxActive: 20
      #初始化数量
      initialSize: 1
      #最大连接等待超时时间
      maxWait: 60000
      #打开PSCache,并且指定每个连接PSCache的大小
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      #通过connectionProperties属性来打开mergeSql功能;慢SQL记录
      #connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      minIdle: 1
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: select 1 from dual
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false

      jpa:
      show-sql: true
      hibernate:
      ddl-auto: none
      jackson:
      serialization:
      indent_output: true

    
    pom.xml配置如下:
    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-cache</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>
    

    三.效果如下

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • java操作Redis缓存设置过期时间

    千次阅读 2019-04-11 16:47:40
    https://blog.csdn.net/sunhongbing1024/article/details/82017614 java操作Redis缓存设置过期时间 关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间。 在应用中我们会需要使用redis设置...

    https://blog.csdn.net/sunhongbing1024/article/details/82017614 java操作Redis缓存设置过期时间

    关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间。

    在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息转为json串作为value保存在redis中,通常做法是:

    //生成token
    String token = UUID.randomUUID().toString();
    //把用户信息写入redis
    jedisClient.set(REDIS_USER_SESSION_KEY + “:” + token,JsonUtils.objectToJson(user));
    //设置session的过期时间 时间单位是秒
    jedisClient.expire(REDIS_USER_SESSION_KEY + “:” + token, 1800);
    但这样做可能会出现问题,比如多并发上面,设置值和过期时间用了两步操作。可以将设置值和过期时间合并成一步操作,所以可以使用redis的设置值set的另外一个方法:

    // NX是不存在时才set, XX是存在时才set, EX是秒,PX是毫秒
    jedisClient.set(key, value, “NX”, “EX”, expireSecond);
    取值的时候使用:

    @Override
    public Result getUserByToken(String token) {
        //根据token从redis中查询用户信息
    	String json = jedisClient.get(REDIS_USER_SESSION_KEY + ":" + token);
       //判断是否为空
       if (StringUtils.isBlank(json)) {
        return Result.build(400, "此session已经过期,请重新登录");
       }
       //更新过期时间
       jedisClient.expire(REDIS_USER_SESSION_KEY + ":" + token, 1800);
       //返回用户信息
       return Result.ok(JsonUtils.jsonToPojo(json, TbUser.class));
    }
    

    其他使用方法:

    public void save(String key, String value, Long expireSecond) {
    boolean keyExist = jedisClient.exists(key);
    if (keyExist) {
    jedisCluster.del(key);
    }

    // NX是不存在时才set, XX是存在时才set, EX是秒,PX是毫秒
    jedisClient.set(key, value, "NX", "EX", expireSecond);
    
    展开全文
  • java创建本地缓存,模拟redis的使用 在一般的小项目中,数据量不大.但是有的时候需要使用缓存记录一些标识或者票据之类的,比如我这边想实现,可以记录系统同时在线的用户数据,或者对其他数据的缓存记录,减少DBA请求 1. ...

    java创建本地缓存,模拟redis的使用

    在一般的小项目中,数据量不大.但是有的时候需要使用缓存记录一些标识或者票据之类的,比如我这边想实现,可以记录系统同时在线的用户数据,或者对其他数据的缓存记录,减少DBA请求

    1. 创建缓存实体类

    package com.adingxiong.cft.entity;
    
    import java.io.Serializable;
    
    /**  * @author xiongc  * @date 2020/07/28  */ public class CacheEntity implements Serializable {  private static final long serialVersionUID = -107853226360392750L;  /**  * 值  */  private Object value;   /**  * 保存的时间戳  */  private long gmtModify;   /**  * 过期时间  */  private int expire;   public Object getValue() {  return value;  }   public void setValue(Object value) {  this.value = value;  }   public long getGmtModify() {  return gmtModify;  }   public void setGmtModify(long gmtModify) {  this.gmtModify = gmtModify;  }   public int getExpire() {  return expire;  }   public void setExpire(int expire) {  this.expire = expire;  }   public CacheEntity(Object value, long gmtModify, int expire) {  super();  this.value = value;  this.gmtModify = gmtModify;  this.expire = expire;  } }   
    

    2. 创建本地缓存工具类

    package com.adingxiong.cft.cache;
    
    import com.adingxiong.cft.entity.CacheEntity;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory; import org.springframework.util.CollectionUtils;  import java.io.*; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit;  /**  * @ClassName LocalCache  * @Description 本地缓存 代替redis 实现简单数据记录  * @Author xiongchao  * @Date 2020/7/28 16:14  **/ public class LocalCache {   private static final Logger log = LoggerFactory.getLogger(LocalCache.class);   /**  * 默认的缓存容量  */  private static final int DEFAULT_CAPACITY = 512;  /**  * 最大容量  */  private static final int MAX_CAPACITY = 100000;  /**  * 刷新缓存的频率  */  private static final int MONITOR_DURATION = 2;   // 启动监控线程  static {  new Thread(new TimeoutTimerThread()).start();  }   // 内部类方式实现单例  private static class LocalCacheInstance{  private static final LocalCache INSTANCE=new LocalCache();   }  public static LocalCache getInstance() {  return LocalCacheInstance.INSTANCE;  }   private LocalCache() {  }   /**  * 使用默认容量创建一个Map  */  private static Map<String, CacheEntity> cache = new ConcurrentHashMap<>(DEFAULT_CAPACITY);   /**  * 将key-value 保存到本地缓存并制定该缓存的过期时间  *  * @param key  * @param value  * @param expireTime 过期时间,如果是-1 则表示永不过期  * @return  */  public <T> boolean putValue(String key, T value, int expireTime) {  return putCloneValue(key, value, expireTime);  }   /**  * 将值通过序列化clone 处理后保存到缓存中,可以解决值引用的问题  *  * @param key  * @param value  * @param expireTime  * @return  */  private <T> boolean putCloneValue(String key, T value, int expireTime) {  try {  if (cache.size() >= MAX_CAPACITY) {  return false;  }  // 序列化赋值  CacheEntity entityClone = clone(new CacheEntity(value, System.nanoTime(), expireTime));  cache.put(key, entityClone);  return true;  } catch (Exception e) {  log.error("添加缓存失败:{}", e.getMessage());  }  return false;  }   /**  * 序列化 克隆处理  *  * @param object  * @return  */  private <E extends Serializable> E clone(E object) {  E cloneObject = null;  try {  ByteArrayOutputStream baos = new ByteArrayOutputStream();  ObjectOutputStream oos = new ObjectOutputStream(baos);  oos.writeObject(object);  oos.close();  ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());  ObjectInputStream ois = new ObjectInputStream(bais);  cloneObject = (E) ois.readObject();  ois.close();  } catch (Exception e) {  log.error("缓存序列化失败:{}", e.getMessage());  }  return cloneObject;  }   /**  * 从本地缓存中获取key对应的值,如果该值不存则则返回null  *  * @param key  * @return  */  public Object getValue(String key) {  if(CollectionUtils.isEmpty(cache)){  return null;  }  return cache.get(key).getValue();  }   /**  * 清空所有  */  public void clear() {  cache.clear();  }   /**  * 过期处理线程  */  static class TimeoutTimerThread implements Runnable {  @Override  public void run() {  while (true) {  try {  TimeUnit.SECONDS.sleep(MONITOR_DURATION);  checkTime();  } catch (Exception e) {  log.error("过期缓存清理失败:{}", e.getMessage());  }  }  }   /**  * 过期缓存的具体处理方法  *  * @throws Exception  */  private void checkTime() throws Exception {  // 开始处理过期  for (String key : cache.keySet()) {  CacheEntity tce = cache.get(key);  long timoutTime = TimeUnit.NANOSECONDS.toSeconds(System.nanoTime() - tce.getGmtModify());  // 过期时间 : timoutTime  if (tce.getExpire() > timoutTime) {  continue;  }  log.info(" 清除过期缓存 : " + key);  //清除过期缓存和删除对应的缓存队列  cache.remove(key);  }  }  } } 
    

    3. 测试

    写一个简单的controller

    @GetMapping("/cache")
        public Object testCache(String name){
            Object a = LocalCache.getInstance().getValue("name");
            if(a == null){
     LocalCache.getInstance().putValue("name" ,"张三",10);  return "未读取到缓存数据";  }  return "读取到缓存数据,数据为:" + a;  } 
    

    第一次调用

    image
    image

    第二次调用 image

    同时服务那边会根据你设定的过期时间去定期启动线程清理缓存数据

    image
    image

    本文使用 mdnice 排版

    展开全文
  •  是一个纯Java的进程内缓存框架,具有快速、精干等特点,广泛使用的开源Java分布式缓存。 F 集成微信接口开发;  G 图片爬虫技术 ;  H SQL 编辑器, 支持复杂sql语句,生成报表,可以导出excel ; I ...


    三大数据库 mysql  oracle  sqlsever   更专业、更强悍、适合不同用户群体
    新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统

    A 调用摄像头拍照,自定义裁剪编辑头像

    B 集成代码生成器 [正反双向](单表、主表、明细表、树形表,开发利器)+快速构建表单;  技术:313596790
    freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面、建表sql脚本,处理类,service等完整模块
    C 集成阿里巴巴数据库连接池druid;
      数据库连接池  阿里巴巴的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势
    D 集成安全权限框架shiro ;
      Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权,更安全,更可靠
    E 集成ehcache 分布式缓存 ;
      是一个纯Java的进程内缓存框架,具有快速、精干等特点,广泛使用的开源Java分布式缓存。
    F 集成微信接口开发;    G 图片爬虫技术;   H  SQL 编辑器, 支持复杂sql语句,生成报表,可以导出excel
    I websocket及时通讯技术(即时聊天、及时站内信并声音提醒、实时在线管理、websocket及时刷新页面);
    J redis 工具类接口;   K 多数据源(支持同时连接无数个数据库,可以不同的模块连接不同数的据库)
    -------------------------------------------------------------------------------------------------------------------------
    续加入Activiti5 工作流赠送一个jbpm工作流大型ERP系统(含OA、财务、分销)参考学习
    -------------------------------------------------------------------------------------------------------------------------
    1. 模块化、服务化,流程化,耦合度低、扩展性好,灵活度高,工具类封装完整,干净利索,调用简单方便
    2. 提供Rest服务,支持APP手机应用(android和ios)接口、php、.net、易语言、VB等第三方接口调用
    3. 全新高大尚HTML5+css3.0+bootstrap响应式开发界面UI,( 手机 PC 平板 截图在下面)、前沿.  spring restful 风格
    4. 框架搭建完善成熟,在此基础上做过很多项目,系统具有并发处理、分布式、稳定性。
    5. 系统功能完善,此为框架平台,文档、注释齐全,专门供二次开发
    6. 在此基础上可二次开发(OA、ERP、CRM ,医疗管理、金融、网站后台、APP后台、电子商务、商城(赠送UI)等等
    7.我们这边是公司,主要业务是定制开发,  此系统为我们平时给客户做项目用的,经过很多项目实战考验

      -------------------------------------------------------------------------------------------------------------------------系统模块

    1.   权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限
          角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限。
          按钮权限: 给角色分配按钮权限。
    2.   按钮管理:自定义按钮管理,维护按钮权限标识等
    3.   菜单管理:无限级别自定义菜单,自定义菜单图标,业务菜单和系统菜单分离,菜单状态显示隐藏(递归处理
    4.   数据字典:无限级别,支持多级别无限分类。内设编号,排序等
    5.   日志管理:记录用户登录退出和一些重要操作记录
    6.   在线管理:websocket技术,实时检测在线用户列表,统计在线人数,可强制用户下线 同一用户只能在一个客户端登录
    7.   系统用户:对各个基本的用户增删改查,单发、群发站内信邮件短信,导入导出excel表格,批量删除
    8.   会员管理:对前台用户管理,分配会员级别,到期时间,状态,联系信息等资料
    9.   代码生成:生成完整的模块代码,并保留生成记录模版,可复用 (超强悍开发利器
          正向生成:  生成完整的模块,页面、处理类、service层、myabaits的xml 建表的sql脚本等
          反向生成:  任意连接其它数据库(mysql、oracle、sqlserver),根据表反射生成本系统的模块
    10. 性能监控:监控整个系统的性能,SQL监控,SQL防火墙,URL监控,SPRING监控,SESSION监控等
    11. 接口测试:POST or GET 方式检测系统接口,参数加密,json返回结果,计算服务器响应时间
    12. 发送邮件:单发,群发邮件  
    13. 置二维码:生成二维码图表保存到服务器 or  解析读取二维码内信息
    14. 图表报表:柱状图、饼状图、折线图、各种图表大全
    15. 地图工具:打开地图, 鼠标点击地图某位置获取经纬度坐标,根据经纬度计算两点距离
    16. 打印测试:页面打印预览测试
    17. 图片管理:对批量上传的图片统一管理 ,点击放大,可打开多个,自由切换,绚丽预览效果
    18. 图片爬虫:输入某网址,爬出其图片显示在页面上,可以放大预览。可保存到服务器上,到图片管理里面
    19. 站内信:收信箱和发信箱, websocket技术通讯技术做的及时收信提醒,可配置语音提示来信
    20. 下拉联动:四级下拉联动demo
    21. 系统设置:修改系统名称,邮件服务器配置,短信账号设置,图片水印配置,微信配置
    22. 及时聊天:打开聊天窗口,可群聊、一对一聊天
    23. 表单构建:拖拽式快速自定义构建表单,组建元素丰富,有富文本、上传控件、下拉框等等
    24. 主附结构:提供一个主表和明细表模块的例子(用本代码生成器生成的)
    25. 组织机构:无限级别,公司or部门管理
    26. 员工管理:和组织机构部门管理,可以绑定登录系统用户,授权数据权限
    27. 文件管理:上传文件,修改删除文件,计算文件大小
      -------------------------------------------------------------------------------------------------------------------------数据库管理
    28
    . 数据库备份:可备份单表、整库,支持本地和远程数据库备份(java界面编程技术,socket编程技术)
    29. 备份定时器:quartz 2.2 强大的任务调度,多线程备份数据库,任务启动关闭异步操作
    30. 数据库还原:历史备份记录,还原数据库 or 单表 ,统计备份时间和文件大小
    31. SQL编辑器:强大的SQL编辑器,支持编辑语句复杂查询语句,生成动态报表,可导出excel
    -------------------------------------------------------------------------------------------------------------------------

    菜单权限:分配给每个角色不同的菜单权限, 每个角色看到的菜单不同,无限级别菜单
    按钮权限:独立分配不同的角色不同的功能权限,增删改查权限分配具体到不同的菜单,自定义按钮管理
    支持多用户分权限管理后台,  权限具体到不同的菜单不同的按钮

    ---------------------------------------------------------------------------------------信息模块(小项目代码中)

    新闻管理:新闻的维护、发布、权重排序等 采用百度ueditor富文本框

    公告管理:公告的维护、发布

    广告管理:广告的维护、发布,状态维护,上传广告图片

    友情链接:友情链接的维护、状态维护

    特别推荐:特别推荐、状态维护

    微信模块  有指导视频  花生壳本地IP映射操作

    关注回复:微信用户关注公众号回复

    文本回复:匹配关键词进行文本回复

    图文回复:匹配关键词进行图文回复

    应用命令:匹配关键词进行命令操作,例如微信发送命令,执行服务器重启、关机、锁定等操作

    -------------------------------------------------------------------------------------------------------------------------

    获取【下载地址】   QQ 313596790

    技术点

    1. 导出 导入 excel 文件
    2  导出word文件
    3. IO 流上传下载文件
    4. 群发邮件,可以发html、纯文本格式,可以发给任意邮箱(实现批量发送广告邮件)
    5. 群发or单独 发送短信,支持两种第三方短信商接口
    6. spring   aop  事务处理
    7. 代码生成器 (freemarker), 代码 zip 压缩打包
    8. MD5加密 SHA加密(登录密码用此加密)接口加密身份校验
    9. 数据库连接池  阿里的 druid。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势,支持并发
    10.加入安全框架 shiro (登录授权)(session管理)
    11.根据汉字 解析汉字的全拼(拼音)和首字母(导入excel到用户表,根据用户的汉字姓名生成拼音的用户名)
    12.app接口@ResponseBody(支持与其它语言数据交互)
    13.极光推送 (推送给APP及时消息,APP不启动也能收到)
    14.微信接口(身份验证,文本、图文回复等) 微信远程控制服务器重启、锁定、其它应用程序
    15.java Quartz2.2 任务调度
    16.java websocket 即时通讯技术,点对点,群聊,单聊
    17.Lucene全文检索(在赠送的项目中)
    18.Base64传输图片
    19.图片加水印(图片水印,文字水印)
    20.生成 or  解析 二维码
    21.HTML5 + JAVAEE  WebSocket 通信技术,WebSocket 验证用户登录,强制某用户下线
    22.批量异步上传图片,可预览,有进度条,支持拖拽上传(百度webuploader )。列表动态滑动放大展示。
    23.ehcache 自定义二级缓存 ,选择缓存存放目录,处理并发,增加系统性能
    24.服务器内部GET POST 请求
    25.uploadify 上传插件,单条、批量上传多线程,带进度条,异步,图片、视频, 其它文件格式均可上传
    26.地图选点获取经纬度坐标,根据俩经纬度计算距离
    27.tab标签页面功能,标签自由切换,不重复操作数据库
    28.站内信语音提醒,js控制音频播放
    29.百度富文本编辑器,可上传图片
    30.网页爬虫技术,可根据网页地址爬取图片和网页标题等信息(爬取某商城图片保存本服务器)
    31.redis 技术
    32.多数据源技术
    33.springmvc 下拉多级联动技术
    34.调用摄像头拍照技术,图片裁剪技术

    -------------------------------------------------------------------------------------------------------------------------
    系统框架为: springmvc + spring+ mybaits  SSM 【 spring3.0.5 和 spring4.2.5  mybaits 3.3】     
    操作系统:windows  linux mac   等没有限制。   有 maven javaee 版 jdk 1.6 1.7 1.8  tomcat 6 7 8   
    开发工具:myeclipse  eclipse idea 均可, 没有限制   数据库:oracle、msyql、sqlserver (2005及以上均支持)  

    系统演示视频:
    http://www.tudou.com/programs/view/1z5hxi2aBRs/          (视频二)        
    链接:http://pan.baidu.com/s/1gdN32Ht 密码:xh7w  百度云 (视频一)
    链接:http://pan.baidu.com/s/1nvgXotN 密码:nxw0  百度云 (视频二)
    PC实物截图如下 获取【下载地址】   

    背景用HTML5特效自动切换(百叶窗,幕布等多种切换方式) 有背景音乐和背景动画



    展开全文
  •  是一个纯Java的进程内缓存框架,具有快速、精干等特点,广泛使用的开源Java分布式缓存。 F 集成微信接口开发;  G 图片爬虫技术 ;  H SQL 编辑器, 支持复杂sql语句,生成报表,可以导出excel ; I ...
  • 零基础学会REDIS缓存数据库在JAVA中的使用。从REDIS的安装和使用开始,到Java程序与REDIS数据库进行连接互动,简单明了。
  • 应用缓存 redis缓存We’ve gone through the basics of Redis in PHP before, but it’s time to cover a real life use case. In this tutorial, we’ll add it to an already deployed application to give the ...
  • Redis 缓存击穿

    2019-12-18 23:50:33
    Redis 缓存击穿的预防方案
  • redis缓存

    2017-02-22 10:39:57
    redis是一个高性能的key-value数据库,支持内存高速缓存 我们可以用其来存储键值对数据,当然因为redis的高性能的键值对存储特性,我们也常常用...为什么Redis缓存速度这么快 首先介绍一下硬盘数据库和Redis的工作模式
  • 网上看了很多解决缓存击穿的方案, ...2. 如何解决缓存击穿2.1 普通的redis缓存使用方式2.1.1 使用redis缓存查询逻辑优点缺点适用情况2.2 解决redis缓存击穿问题2.2.1 主动刷新缓存设计查询逻辑优点缺点适用情况2.2....
  • 来源:dongshao.blog.csdn.net/article/details/107190925本文介绍MySQL与Redis缓存的同步的两种方案通过MySQL自动同步刷新Redis...
  • 1、缓存雪崩:因为redis缓存的key一般都是定时刷新,也就是说在同一时间内所有的key全部失效,如果这时候又大量的访问进来,没有redis缓存的帮助数据库会被击垮,就会造成缓存雪崩,此时,如果没什么特别的方案来...
  • Spring Boot 实践之九 Spring Boot 缓存管理 ​ 缓存是分布式系统中...​ 本章将针对Spring Boot的缓存管理进行介绍,并完成与Redis缓存中间件的整合使用。 1 Spring Boot默认缓存管理 ​ Spring Boot 管理缓存的枋心是
  • Springboot2.0整合Redis缓存+Ehcache缓存

    千次阅读 2019-05-17 17:01:07
    整合Redis缓存与Ehcache缓存
  • Java 使用Redis做数据缓存

    千次阅读 2018-12-02 10:56:59
    我们在做后端服务的时候,要非常注重性能,比如我们一个项目,大家回频繁地打开某一个页面的时候,回频繁地去后台请求数据库访问数据,重复地查询一样的数据,这样一想,在...我们使用 Redis 来实现缓存 1.引入...
  • Redis 缓存

    2018-01-08 17:34:40
    缓存类型 ...1.使用Ctrl+F5可以强制刷新浏览器本地缓存 2.浏览器中的参数设置的时间已过期如:Expires,Cache-control: max-age, Last-Modified标签等 网络中缓存 网络中的缓存主要是指代理服务器对...
  • 请求数量较高,大量的请求过来之后都要从缓存中获取数据,但是缓存中又没有,从数据库中查找数据后将数据再存入缓存,造成了短期内对redis的高强度操作 主从之间数据吞吐量较大,数据同步操作频度较高 解决方案: ...
  • 问题描述: 今天在学习的过程的又遇到一个问题,在使用了Redis缓存技术后,频繁刷新页面,页面有些内容会丢失,如下图: 解决方法: 经过测试和分析,在使用jedis对象进行访问Redis数数据库的时候没有关闭连接,把...
  • Redis缓存 缓存的处理流程:前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果。 缓存雪崩 由于原有缓存失效,新缓存未...
  • redis缓存雪崩和缓存穿透、缓存预热、缓存降级 缓存雪崩 我们可以简单的理解为:由于原有缓存失效,新缓存还没有存入到redis的期间 比方说:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期...
  • 大家好,我是发财!...阿里Java研发三面:说说Redis缓存雪崩,穿透,击穿,降级解决方案 一、缓存雪崩 1、什么是缓存雪崩? 如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有的查询都落在数据库上,造...
  • SSM集成Redis缓存数据库

    千次阅读 2018-01-04 17:36:27
    SSM集成Redis缓存数据库
  • 点击下方公众号「关注」和「星标」回复“1024”获取独家整理的学习资料!本文介绍MySQL与Redis缓存的同步的两种方案方案1:通过MySQL自动同步刷新Redis,MySQL触发器+U...
  • public class RedisConfig extends CachingConfigurerSupport{ @Resource private LettuceConnectionFactory lettuceConnectionFactory; //@description 自定义的缓存key的生成策略,若想使用这个key 只需要将...
  • Redis缓存的设计.

    千次阅读 2015-04-25 18:31:13
    Redis缓存设计  一、 现在redis缓存是一个很热门的话题,公司里面用了一个Redis作为缓存框架,感觉有很多地方不足,比如: 1.只有数据查询缓存而没有数据插入的缓存修改。 2.缓存太过于麻烦,要先插入后在查询一遍...
  • java操作redis

    2019-09-18 21:09:49
    目录java操作redis项目实战 java操作redis 这里主要是对五大存储类型的操作 string(字符串) hash(哈希) list(列表) set(集合) zset(sorted set:有序集合) package com.xy.redis; import redis....
  • 5.2.2 基于注解的Redis缓存实现 ​ 在Spring Boot默认缓存管理的基础上引入Redis缓存组件,使用基于注解的方式讲解Spring Boot整合Redis缓存的具体实现 (1)添加Spring Data Redis依赖启动器。在pom.xml文件中添加...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,652
精华内容 6,660
关键字:

java刷新redis缓存

java 订阅
redis 订阅