zoukankan      html  css  js  c++  java
  • Java代码操作Redis

    •  在pom.xml中下载redis的依赖

       <dependency>
              <groupId>redis.clients</groupId>
              <artifactId>jedis</artifactId>
              <version>2.9.0</version>
         </dependency>
    •  连接数据库 

      //输入你的ip和 端口
           Jedis jedis = new Jedis("192.168.80.128",6379);
              jedis.auth("613613");  //设置的密码
              System.out.println(jedis.ping());

       效果:

    • 操作字符串

     jedis.set("ht","墙头马上遥相顾");

      在客户端中查看

      

    System.out.println( jedis.get("ht"));

      服务端测试查看

     

    • 操作哈希

    jedis.hset("user","uname","黄大娘");
    edis.hset("user","usex","女");

    效果

      在服务端查看

      //得到哈希值
            System.out.println(jedis.hgetAll("user"));  //方式一
            System.out.println(jedis.hget("user", "uname"));

    • 操作列表

    jedis.lpush("shici","青灯","不归客","山有木兮","木有之","墙头","马上");

      效果

      

      服务端测试

     System.out.println(jedis.lpop("shici"));//桟结构,所以是先进后出的道理

      

    •  模拟数据存在redis缓存中

      HuangSevlet

    package com.huang;
    import redis.clients.jedis.Jedis;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.util.Map;
    /**
     * @author 黄大娘
     * @company dogson有限公司
     * @create  2019-09-18 15:46
     */
    @WebServlet("/gethuang")
    public class HuangServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //第一次读取数据库,后从缓存中读取数据
            Jedis jedis = new Jedis("192.168.80.128",6379);
            jedis.auth("613613");
            //从缓存中读取用户
            Map cretauser =jedis.hgetAll("cretauser");
            if (cretauser !=null && cretauser.size()>0 ){
                req.setAttribute("msg","从缓存中拿数据");
            }else{
                //第一次登陆获取首页数据
                req.setAttribute("msg","从数据库中拿数据");
                String uname="huangting";
                String upas="123456";
                //把数据库中对应的对象存到缓存中
                jedis.hset("cretauser","uname","huangting");
                jedis.hset("cretauser","upas","123456");
                cretauser = jedis.hgetAll("cretauser");
                req.setAttribute("cretauser",cretauser);
            }
            req.getRequestDispatcher("/index.jsp").forward(req,resp);
        }
    }

    优化项目

    第一次去数据库中拿数据后期在从Redis缓存中拿数据,减少访问数据库的次数提高性能

      

    package com.huangting.blog.web;
    
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    import java.nio.file.Paths;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
    import org.apache.lucene.document.Document;
    import org.apache.lucene.document.Field;
    import org.apache.lucene.document.StringField;
    import org.apache.lucene.document.TextField;
    import org.apache.lucene.index.DirectoryReader;
    import org.apache.lucene.index.IndexReader;
    import org.apache.lucene.index.IndexWriter;
    import org.apache.lucene.index.IndexWriterConfig;
    import org.apache.lucene.index.Term;
    import org.apache.lucene.queryparser.classic.QueryParser;
    import org.apache.lucene.search.IndexSearcher;
    import org.apache.lucene.search.Query;
    import org.apache.lucene.search.ScoreDoc;
    import org.apache.lucene.search.TopDocs;
    import org.apache.lucene.search.highlight.Formatter;
    import org.apache.lucene.search.highlight.Highlighter;
    import org.apache.lucene.search.highlight.QueryScorer;
    import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
    import org.apache.lucene.store.Directory;
    import org.apache.lucene.store.FSDirectory;
    import org.apache.struts2.ServletActionContext;
    import org.apache.struts2.dispatcher.Parameter.Request;
    
    import com.huangting.blog.dao.BlogDao;
    import com.huangting.blog.util.JsonUtils;
    import com.huangting.blog.util.LuceneUtil;
    import com.huangting.blog.util.PropertiesUtil;
    import com.huangting.blog.util.StringUtils;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    
    /**
     * 专门将网页静态化的类,这里不涉及到lucene
     * @author Administrator
     *
     */
    public class FreemarkerBlogAction {
        private String title;
        private String bid;
        private BlogDao blogDao = new BlogDao();
        private static Jedis jedis;
         static {
                jedis =new Jedis("192.168.80.128",6379);
                jedis.auth("613613");
                jedis.select(0);  //选择要操作的数据库
            }
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getBid() {
            return bid;
        }
    
        public void setBid(String bid) {
            this.bid = bid;
        }
    
         public String list() {
                try {
                    HttpServletRequest request = ServletActionContext.getRequest();
                    if (StringUtils.isBlank(title)) {
    //                    从Redis中获取数据
                        String bolgListALL =jedis.get("blogList");
                        if(bolgListALL != null && bolgListALL.length()>0) {
                            System.out.println("使用redis缓存查询");
                            request.setAttribute("blogList", JSON.parse(bolgListALL));
                        }else {
    //                        从数据库中查询数据
                            List<Map<String, Object>> blogList = this.blogDao.freemarker_list(title, null);
    //                        放入缓存
                            jedis.set("blogList", JSON.toJSONString(blogList));
                            //传到jsp页面
                            request.setAttribute("blogList", blogList);
                            System.out.println("从数据中拿数据");
                        }
                    } else {
                        SmartChineseAnalyzer analyzer = new SmartChineseAnalyzer();
                        IndexReader indexReader = DirectoryReader
                                .open(FSDirectory.open(Paths.get(PropertiesUtil.getValue("indexPath"))));
                        IndexSearcher searcher = new IndexSearcher(indexReader);
                        // 拿一句话到索引目中的索引文件中的词库进行关键词碰撞
                        Query query = new QueryParser("title", analyzer).parse(title);
                        TopDocs topDocs = searcher.search(query, 100);
                        // 将碰撞出来的关键词给点亮
                        QueryScorer queryScorer = new QueryScorer(query);
                        // 以什么形式点亮关键词
                        Formatter formatter = new SimpleHTMLFormatter("<span style='color:red;'><b>", "</span></b>");
                        Highlighter highlighter = new Highlighter(formatter, queryScorer);
                        List<Map<String, Object>> blogList = new ArrayList<>();
                        Map<String, Object> map = null;
                        ScoreDoc[] scoreDocs = topDocs.scoreDocs;
                        for (ScoreDoc scoreDoc : scoreDocs) {
                            map = new HashMap<>();
                            Document doc = searcher.doc(scoreDoc.doc);
                            map.put("bid", doc.get("bid"));
                            map.put("summary", doc.get("summary"));
                            String titleHighlighter = doc.get("title");
                            if (StringUtils.isNotBlank(titleHighlighter)) {
                                titleHighlighter = highlighter.getBestFragment(analyzer, "title", titleHighlighter);
                            }
                            map.put("title", titleHighlighter);
                            blogList.add(map);
                        }
                        indexReader.close();
                        request.setAttribute("blogList", blogList);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return "blogList";
            }
    
            /**
             * 这是刷新全局索引调用的方法
             * 
             * @return
             */
            public String refreshIndex() {
                IndexWriterConfig conf = new IndexWriterConfig(new SmartChineseAnalyzer());
                Directory d;
                IndexWriter indexWriter = null;
                try {
                    // 先将索引库中的索引文件清空
                    delTempChild(new File(PropertiesUtil.getValue("indexPath")));
                    
                    d = FSDirectory.open(Paths.get(PropertiesUtil.getValue("indexPath")));
                    indexWriter = new IndexWriter(d, conf);
                    List<Map<String, Object>> list = blogDao.freemarker_list(null, null);
                    for (Map<String, Object> map : list) {
                        Document doc = new Document();
                        doc.add(new StringField("id", String.valueOf(map.get("bid")), Field.Store.YES));
                        doc.add(new StringField("bid", String.valueOf(map.get("bid")), Field.Store.YES));
                        doc.add(new TextField("title", (String) map.get("title"), Field.Store.YES));
                        doc.add(new TextField("summary", (String) map.get("summary"), Field.Store.YES));
                        indexWriter.addDocument(doc);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (InstantiationException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (indexWriter != null) {
                            indexWriter.close();
                        }
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                return "blogList";
            }
    
            public void delTempChild(File file) {
                if (file.isDirectory()) {
                    String[] children = file.list();// 获取文件夹下所有子文件夹
                    // 递归删除目录中的子目录下
                    for (int i = 0; i < children.length; i++) {
                        delTempChild(new File(file, children[i]));
                    }
                }
                // 目录空了,进行删除
                file.delete();
            }
    
            /**
             * 修改前期
             * 
             * @return
             */
            public String perEidt() {
                HttpServletRequest request = ServletActionContext.getRequest();
                try {
                    Map<String, Object> map = this.blogDao.getBlogById(bid);
                    request.setAttribute("map", map);
                } catch (InstantiationException | IllegalAccessException | SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return "blogEdit";
            }
    
            /**
             * 添加博客
             * 
             * @return
             * @throws SQLException
             * @throws IllegalAccessException
             * @throws IllegalArgumentException
             * @throws SecurityException
             * @throws NoSuchFieldException
             */
            public String add() {
                HttpServletRequest request = ServletActionContext.getRequest();
                Map parameterMap = request.getParameterMap();
                try {
                    // 将博客添加到数据库中 
                    this.blogDao.add(parameterMap);
                    //清除Redis缓存
                    jedis.del("blogList");
                    // 获取当前博客的id
                    int maxId = (int) this.blogDao.maxId();
                    // 添加到lucene 索引库中
                    addIndex(maxId + "", parameterMap);
                    // 将这篇博客进行网页静态化
                    addStaticPage(maxId + "", parameterMap);
                } catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
                return "blogList";
            }
    
            /**
             * 这是删除博客的方法
             */
            public String del() {
                HttpServletRequest request = ServletActionContext.getRequest();
                Map parameterMap = request.getParameterMap();
                try {
                    // 数据库中删除博客
                    this.blogDao.del(request.getParameterMap());
                    //清除Redis缓存
                    jedis.del("blogList");
                    // 删除lucene中对应的文档
                    IndexWriter indexWriter = getIndexWriter();
                    indexWriter.deleteDocuments(new Term("id", bid));
                    indexWriter.forceMergeDeletes(); // 强制删除
                    indexWriter.commit();
                    indexWriter.close();
                    // 删除页面
                    new File("F:\java2\javaxl_lunece_freemarker\src\main\webapp\freemarker" + bid
                            + ".html").delete();
                } catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
                return "blogList";
            }
    
            /**
             * 这是修改的方法
             * 
             * @return
             */
            public String edit() {
                HttpServletRequest request = ServletActionContext.getRequest();
                Map parameterMap = request.getParameterMap();
                try {
                    // 修改数据库中的值
                    this.blogDao.edit(request.getParameterMap());
                    //清除Redis缓存
                    jedis.del("blogList");
                    // 修改lucene中的文档值
                    IndexWriter writer = getIndexWriter();
                    Document doc = new Document();
                    doc.add(new StringField("id", JsonUtils.getParamVal(parameterMap, "bid"), Field.Store.YES));
                    doc.add(new StringField("bid", JsonUtils.getParamVal(parameterMap, "bid"), Field.Store.YES));
                    doc.add(new TextField("title", JsonUtils.getParamVal(parameterMap, "title"), Field.Store.YES));
                    doc.add(new TextField("summary", JsonUtils.getParamVal(parameterMap, "summary"), Field.Store.YES));
                    writer.updateDocument(new Term("id", JsonUtils.getParamVal(parameterMap, "bid")), doc);
                    writer.close();
                    // 修改静态页(相同id会之间覆盖)
                    addStaticPage(JsonUtils.getParamVal(parameterMap, "bid"), parameterMap);
                } catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
                return "blogList";
            }
    
            /**
             * 获取写入对象
             * 
             * @return
             * @throws IOException
             */
            public IndexWriter getIndexWriter() throws IOException {
                IndexWriterConfig conf = new IndexWriterConfig(new SmartChineseAnalyzer());
                Directory d = FSDirectory.open(Paths.get(PropertiesUtil.getValue("indexPath")));
                return new IndexWriter(d, conf);
            }
    
            /**
             * 添加索引文件
             * 
             * @param id
             * @param parameterMap
             * @throws IOException
             */
            private void addIndex(String id, Map parameterMap) throws IOException {
                IndexWriter indexWriter = getIndexWriter();
                Document doc = new Document();
                doc.add(new StringField("id", id, Field.Store.YES));
                doc.add(new StringField("bid", id, Field.Store.YES));
                doc.add(new TextField("title", JsonUtils.getParamVal(parameterMap, "title"), Field.Store.YES));
                doc.add(new TextField("summary", JsonUtils.getParamVal(parameterMap, "summary"), Field.Store.YES));
                indexWriter.addDocument(doc);
                indexWriter.close();
            }
    
            /**
             * 这是添加静态页
             * 
             * @throws IOException
             * @throws TemplateException
             */
            public void addStaticPage(String id, Map parameterMap) throws IOException, TemplateException {
                // 1.创建配置类
                Configuration configuration = new Configuration(Configuration.getVersion());
                // 2.设置模板所在的目录
                configuration.setDirectoryForTemplateLoading(
                        new File("F:\java2\javaxl_lunece_freemarker\src\main\webapp\freemarker"));
                // 3.设置字符集
                configuration.setDefaultEncoding("utf-8");
                // 4.加载模板 (这是在 刚刚设置好的 目录下面去找)
                Template template = configuration.getTemplate("blogDetail.ftl");
                Map map = new HashMap<>();
                Map<String, Object> blog = new HashMap<>();
                blog.put("bid", id);
                blog.put("title", JsonUtils.getParamVal(parameterMap, "title"));
                blog.put("releaseDate", new Date());
                blog.put("btid", JsonUtils.getParamVal(parameterMap, "btid"));
                blog.put("clickHit", JsonUtils.getParamVal(parameterMap, "clickHit"));
                blog.put("content", JsonUtils.getParamVal(parameterMap, "content"));
                map.put("blog", blog);
                // // 6.创建Writer对象
                Writer out = new FileWriter(
                        new File("F:\java2\javaxl_lunece_freemarker\src\main\webapp\freemarker" +blog.get("bid")
                                + ".html"));
                // 7.输出
                template.process(map, out);
                // 8.关闭Writer对象
                out.close();
            }
    }

    运行速度快了蛮多

    谢谢观看!

  • 相关阅读:
    [编程题]多多的数字组合
    mac传输文件到服务器
    git 清除缓存、查看add内容
    go build
    vim编辑器
    Git: clone指定分支
    查看端口占用以及kill
    curl小记录
    Python3.9 malloc error: can’t allocate region
    设计模式-策略模式
  • 原文地址:https://www.cnblogs.com/huangting/p/11550284.html
Copyright © 2011-2022 走看看