统计
  • 建站日期:2021-03-10
  • 文章总数:518 篇
  • 评论总数:151 条
  • 分类总数:32 个
  • 最后更新:4月20日
文章 未分类

13--redis基础代码

梦幻书涯
首页 未分类 正文

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       /* //1.调用service查询
        ProvinceService service = new ProvinceServiceImpl();
        List<Province> list = service.findAll();
        //2.序列化list为json
        ObjectMapper mapper = new ObjectMapper();
        String json = mapper.writeValueAsString(list);*/

        //1.调用service查询
        ProvinceService service = new ProvinceServiceImpl();
        String json = service.findAllJson();


        System.out.println(json);
        //3.响应结果
        response.setContentType("application/json;charset=utf-8");
        response.getWriter().write(json);

    }

 

 

public class JDBCUtils {

    private static DataSource ds ;

    static {

        try {
            //1.加载配置文件
            Properties pro = new Properties();
            //使用ClassLoader加载配置文件,获取字节输入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);

            //2.初始化连接池对象
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接池对象
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /**
     * 获取连接Connection对象
     */
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }
}

 

 

 public String findAllJson() {
        //1.先从redis中查询数据
        //1.1获取redis客户端连接
        Jedis jedis = JedisPoolUtils.getJedis();
        String province_json = jedis.get("province");

        //2判断 province_json 数据是否为null
        if(province_json == null || province_json.length() == 0){
            //redis中没有数据
            System.out.println("redis中没数据,查询数据库...");
            //2.1从数据中查询
            List<Province> ps = dao.findAll();
            //2.2将list序列化为json
            ObjectMapper mapper = new ObjectMapper();
            try {
                province_json = mapper.writeValueAsString(ps);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }

            //2.3 将json数据存入redis
            jedis.set("province",province_json);
            //归还连接
            jedis.close();

        }else{
            System.out.println("redis中有数据,查询缓存...");
        }


        return province_json;
    }

 

 

    private static JedisPool jedisPool;

    static{
        //读取配置文件
        InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        //创建Properties对象
        Properties pro = new Properties();
        //关联文件
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取数据,设置到JedisPoolConfig中
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));

        //初始化JedisPool
        jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));

 

    }


    /**
     * 获取连接方法
     */
    public static Jedis getJedis(){
        return jedisPool.getResource();
    }

 

 

 

 

 

public class JedisTest {


    /**
     * 快速入门
     */
    @Test
    public void test1(){
        //1. 获取连接
        Jedis jedis = new Jedis("localhost",6379);
        //2. 操作
        jedis.set("username","zhangsan");

        //3. 关闭连接
        jedis.close();
    }


    /**
     * string 数据结构操作
     */
    @Test
    public void test2(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        //存储
        jedis.set("username","zhangsan");
        //获取
        String username = jedis.get("username");
        System.out.println(username);

        //可以使用setex()方法存储可以指定过期时间的 key value
        jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对

        //3. 关闭连接
        jedis.close();
    }

    /**
     * hash 数据结构操作
     */
    @Test
    public void test3(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        // 存储hash
        jedis.hset("user","name","lisi");
        jedis.hset("user","age","23");
        jedis.hset("user","gender","female");

        // 获取hash
        String name = jedis.hget("user", "name");
        System.out.println(name);


        // 获取hash的所有map中的数据
        Map<String, String> user = jedis.hgetAll("user");

        // keyset
        Set<String> keySet = user.keySet();
        for (String key : keySet) {
            //获取value
            String value = user.get(key);
            System.out.println(key + ":" + value);
        }

        //3. 关闭连接
        jedis.close();
    }


    /**
     * list 数据结构操作
     */
    @Test
    public void test4(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        // list 存储
        jedis.lpush("mylist","a","b","c");//从左边存
        jedis.rpush("mylist","a","b","c");//从右边存

        // list 范围获取
        List<String> mylist = jedis.lrange("mylist", 0, -1);
        System.out.println(mylist);
       
        // list 弹出
        String element1 = jedis.lpop("mylist");//c
        System.out.println(element1);

        String element2 = jedis.rpop("mylist");//c
        System.out.println(element2);

        // list 范围获取
        List<String> mylist2 = jedis.lrange("mylist", 0, -1);
        System.out.println(mylist2);

        //3. 关闭连接
        jedis.close();
    }

 

    /**
     * set 数据结构操作
     */
    @Test
    public void test5(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作


        // set 存储
        jedis.sadd("myset","java","php","c++");

        // set 获取
        Set<String> myset = jedis.smembers("myset");
        System.out.println(myset);

        //3. 关闭连接
        jedis.close();
    }

    /**
     * sortedset 数据结构操作
     */
    @Test
    public void test6(){
        //1. 获取连接
        Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
        //2. 操作
        // sortedset 存储
        jedis.zadd("mysortedset",3,"亚瑟");
        jedis.zadd("mysortedset",30,"后裔");
        jedis.zadd("mysortedset",55,"孙悟空");

        // sortedset 获取
        Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);

        System.out.println(mysortedset);


        //3. 关闭连接
        jedis.close();
    }

    /**
     * jedis连接池使用
     */
    @Test
    public void test7(){

        //0.创建一个配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(10);

        //1.创建Jedis连接池对象
        JedisPool jedisPool = new JedisPool(config,"localhost",6379);

        //2.获取连接
        Jedis jedis = jedisPool.getResource();
        //3. 使用
        jedis.set("hehe","heihei");


        //4. 关闭 归还到连接池中
        jedis.close();;

    }

    /**
     * jedis连接池工具类使用
     */
    @Test
    public void test8(){
       
        //通过连接池工具类获取
        Jedis jedis = JedisPoolUtils.getJedis();

 

        //3. 使用
        jedis.set("hello","world");


        //4. 关闭 归还到连接池中
        jedis.close();;

    }

 

 

 

 

 

<script>
        $(function () {
          
            //发送ajax请求,加载所有省份数据
            $.get("provinceServlet",{},function (data) {
                //[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}]

                //1.获取select
                var province = $("#province");
                //2.遍历json数组
                $(data).each(function () {
                    //3.创建<option>
                    var option = "<option name='"+this.id+"'>"+this.name+"</option>";

                    //4.调用select的append追加option
                    province.append(option);
                });


            });
           
        });
       
       
    </script>

 

 

 

public class JedisTest {
    /*
    *
    *  value的数据结构:
                        1) 字符串类型 string
                        2) 哈希类型 hash : map格式
                        3) 列表类型 list : linkedlist格式。支持重复元素
                        4) 集合类型 set  : 不允许重复元素
                        5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
    * */
    //1) 字符串类型 string
    @Test
    public void test01() {
        /*
         * redis--->String
         * set key value
         * get key value
         * del key
         * setex key time value--->time就是超过这个时间就自动删除这个key value ,用户验证码
         * */
        Jedis jedis = new Jedis();
        jedis.set("username", "wangcx");
        jedis.set("age", "wangcx");
        jedis.set("address", "广东省湛江雷州");
        String username = jedis.get("username");
        String address = jedis.get("address");
        System.out.println(username);
        System.out.println(address);
        jedis.del(username);
        String username1 = jedis.get("username");
        System.out.println(username1);
    }

    // 2) 哈希类型 hash : map格式
    @Test
    public void test02() {
        /*
         * redis--->Hash
         * hset key field value--->存储:
         * hget key field--->获取指定的field对应的值
         * hgetall key--->获取所有的field和value----返回值: Map<String, String> map
         * hdel key field
         * */
        Jedis jedis = new Jedis();
        jedis.hset("hase", "username", "wangcx");
        jedis.hset("hase", "age", "23");
        jedis.hset("hase", "address", "leizhou");
        //获取   1
        Map<String, String> map = jedis.hgetAll("hase");
        Set<String> keyset = map.keySet();
        for (String key : keyset) {
            System.out.println(key + ":" + map.get(key));
        }
        //获取   2
        //String age = jedis.hget("hase", "age");
        //删除:  jedis.hdel("hase","age");
    }


    // 3) 列表类型 list : linkedlist格式。支持重复元素
    @Test
    public void test03() {
        /*
         * redis--->List
         * lpush key value--->左边存储:将元素加入列表左表
         * rpush key value--->右边存储:将元素加入列表右边
         * lrange key start end --->有范围获取数据------0是start -1是end
         * lpop key--->从list集合最左边移除或者弹出或者删除该key以及对应的值,并返回删除key所对应的值
         * rpop key--->从list集合最右边移除或者弹出或者删除该key以及对应的值,并返回删除key所对应的值
         * */
        Jedis jedis = new Jedis();
        jedis.lpush("uname", "listUsername");
        jedis.lpush("uname", "listUsername1");
        jedis.lpush("uname", "listUsername2");
        jedis.lpush("uname", "listUsername3");
        jedis.lpush("uage", "listAge");
        jedis.lpush("uaddress", "listAddress");
        List<String> username = jedis.lrange("uname", 0, -1);
        System.out.println(username);//[listUsername3, listUsername2, listUsername1, listUsername]
        for (int i = 0; i < username.size(); i++) {
            System.out.println("for==" + username.get(i));
            //for==listUsername3
            //for==listUsername2
            //for==listUsername1
            //for==listUsername
        }
    }


    // 4) 集合类型 set  : 不允许重复元素
    @Test
    public void test04() {
        /*
         * redis--->set集合
         * sadd key value--->存储
         * smembers key --->smembers key:获取set集合中所有元素
         * srem key --->删除:srem key value:删除set集合中的某个元素
         * */
        Jedis jedis = new Jedis();
        jedis.sadd("umath", "123", "1234", "456");
        Set<String> umath = jedis.smembers("umath");
        System.out.println("umath=====" + umath);//umath=====[123, 456, 1234]
        Iterator<String> iterator = umath.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            System.out.println("Iterator<String>===" + next);
        }
        //删除:
        Long umath1 = jedis.srem("umath", "123");//返回值是:1,说明删除了一项
        System.out.println(umath1);
        Set<String> umath2 = jedis.smembers("umath");
        System.out.println("umath=====" + umath2);//umath=====[456, 1234]
    }


    // 5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
    @Test
    public void test05() {
        /*
         * redis--->sortedset-----不允许重复key元素,且元素有顺序
         * zadd  key  score value--->左边存储:将元素加入列表左表
         * zrange key start end --->右边存储:将元素加入列表右边
         * zrange key start end withscores --->右边存储:将元素加入列表右边
         * zrem key value --->有范围获取数据------0是start -1是end
         * */
        Jedis jedis = new Jedis();
        jedis.zadd("sortedset", 50, "wangcx1");
        jedis.zadd("sortedset", 51, "wangcx2");
        jedis.zadd("sortedset", 52, "wangcx3");
        Set<String> set = jedis.zrange("sortedset", 0, -1);
        System.out.println("sortedset:" + set);
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            System.out.println("set集合" + next);
        }
        //删除:Long zrem = jedis.zrem("sortedset", "王成喜");
        //System.out.println("橡树" + zrem);
    }

    // 6) jedis连接池: JedisPool的使用
    @Test
    public void test06() {
        /*
                                    #最大活动对象数
                            redis.pool.maxTotal=1000
                            #最大能够保持idel状态的对象数
                            redis.pool.maxIdle=100
                            #最小能够保持idel状态的对象数
                            redis.pool.minIdle=50
                            #当池内没有返回对象时,最大等待时间
                            redis.pool.maxWaitMillis=10000
                            #当调用borrow Object方法时,是否进行有效性检查
                            redis.pool.testOnBorrow=true
                            #当调用return Object方法时,是否进行有效性检查
                            redis.pool.testOnReturn=true
                            #“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
                            redis.pool.timeBetweenEvictionRunsMillis=30000
                            #向调用者输出“链接”对象时,是否检测它的空闲超时;
                            redis.pool.testWhileIdle=true
                            # 对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
                            redis.pool.numTestsPerEvictionRun=50
                            #redis服务器的IP
                            redis.ip=xxxxxx
                            #redis服务器的Port
                            redis1.port=6379
         * */
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(15);
        //JedisPool jedisPool = new JedisPool();可以空,可以设置参数
        JedisPool jedisPool = new JedisPool(config, "localhost", 6379);
        Jedis jedis = jedisPool.getResource();
        jedis.set("jedispool1", "hello1");
        String jedispool = jedis.get("jedispool1");
        System.out.println(jedispool);

    }

    // 6) 使用jedisUtil类来连接jedis连接池:
    // JedisPool工具类的使用
    @Test
    public void test07() {
        Jedis jedis = JedisUtil.getJedis();
        jedis.set("tool","Tooljava");
        String tool = jedis.get("tool");
        System.out.println("tool=="+tool);
    }
}

 

 

 

public class JedisUtil {
    private static JedisPool jedisPool;
    private static Jedis jedis;

    static {
        //将工具类加载到内存中
        InputStream in = JedisUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
        System.out.println(in);
        Properties pro = new Properties();
        try {
            pro.load(in);
            String maxTotal = pro.getProperty("maxTotal");
            String maxIdle = pro.getProperty("maxIdle");
            String host = pro.getProperty("host");
            String port = pro.getProperty("port");
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxIdle(Integer.parseInt(maxIdle));
            config.setMaxTotal(Integer.parseInt(maxTotal));
            jedisPool = new JedisPool(config, host, Integer.parseInt(port));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    @Test
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}

 

 

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

这篇文章最后更新于2019-10-5,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
mysql基础复习和总结秘籍
« 上一篇
13--redis笔记
下一篇 »

发表评论

HI ! 请登录
注册会员,享受下载全站资源特权。
Array

日历

热门文章