实训三 redis和jedis笔记

  1. r e d i s 是 非 关 系 型 数 据 库 redis是\color{red}{非关系型数据库} redis,基于键值对

  2. 5种数据类型

    • string 字符串类型
    • hash 哈希类型
    • list 列表类型
    • set 集合类型
    • sortedset 有序集合类型
  3. redis应用场景

    1. 缓存(数据查询、短连接、新闻内容、商品内容等等)
    2. 聊天室的在线好友列表
    3. 任务队列。(秒杀、抢购、12306等等) 应用排行榜
    4. 数据过期处理(可以精确到毫秒
    5. 分布式集群架构中的session分离

  1. string类型的应用

    存储: set key value
    127.0.0.1:6379> set username zhangsan
    
    获取: get key
    127.0.0.1:6379> get username
    
    删除: del key
    127.0.0.1:6379> del age
    
  2. hash类型应用

    存储: hset key field value
    127.0.0.1:6379> hset myhash username lisi
    127.0.0.1:6379> hset myhash password 123
    
    获取: 
    hget key field: 获取指定的field对应的值
    127.0.0.1:6379> hget myhash username 
    
    hgetall key:获取所有的field和value
    127.0.0.1:6379> hgetall myhash
    
    删除: hdel key field
    127.0.0.1:6379> hdel myhash username
    
  3. list列表/队列

    添加:
    1. lpush key value: 将元素加入列表左表
    					lpush myList xxxxx
    2. rpush key value:将元素加入列表右边
    					lpush myList xxxxx
    
    获取:
    lrange key start end :范围获取
    127.0.0.1:6379> lrange myList 0 -1
    
    删除:
    lpop key: 删除列表最左边的元素,并将元素返回
    rpop key: 删除列表最右边的元素,并将元素返回
    
  4. set类型

    存储:sadd key value
    127.0.0.1:6379> sadd myset xxx
    127.0.0.1:6379> sadd myset xxx
    
    获取:smembers key:获取set集合中所有元素
    127.0.0.1:6379> smembers myset
    
    删除:srem key value:删除set集合中的某个元素	
    127.0.0.1:6379> srem myset a
    
  5. sortedset类型

    有序集合类型 sortedset:不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
    
    1. 存储:zadd key score value
    	127.0.0.1:6379> zadd mysort 60 zhangsan
     
    	127.0.0.1:6379> zadd mysort 50 lisi
     
    	127.0.0.1:6379> zadd mysort 80 wangwu
     
    2. 获取:zrange key start end [withscores]
    	127.0.0.1:6379> zrange mysort 0 -1
    
    	127.0.0.1:6379> zrange mysort 0 -1 withscores
     
    3. 删除:zrem key value
    	127.0.0.1:6379> zrem mysort lisi
     
    
  6. 通用指令

    1. keys * : 查询所有的键
    2. type key : 获取键对应的value的类型
    3. del key:删除指定的key value
    
  7. 持久化RDBAOF

    • RDB

      1. 默认方式,无需配置

      2. 在一定间隔检查key的变化情况,然后写入文件

      3. 编辑redis.windwos.conf文件修改间隔时间,后重启

        #   after 900 sec (15 min) if at least 1 key changed
        	save 900 1
        #   after 300 sec (5 min) if at least 10 		keys changed
        save 300 10
        #   after 60 sec if at least 10000 keys changed
        	save 60 10000
        
      4. 启动redis命令行参数要跟配置文件名

        redis-server.exe redis.windows.conf
        
    • AOF 日志记录方式,每一条命令都回更新数据到硬盘

      1. 编辑redis.windwos.conf文件

        appendonly no(关闭aof) --> appendonly yes (开启aof)
        # appendfsync always : 每一次操作都进行持久化
        appendfsync everysec : 每隔一秒进行一次持久化
        # appendfsync no	 : 不进行持久化
        

使用jedis.jar

项目github地址https://github.com/majiaoliya/-javaEE/tree/main/javaEE-11-Redis%E5%8C%85%E7%9A%84%E4%BD%BF%E7%94%A8

  1. 先引入jedis.jar到项目里
    在这里插入图片描述

  2. 建立省份.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>省份</title>
    <script src="js/jquery-3.3.1.js"></script>
</head>
<body>

    省份 : <select name="prov" id="prov">
        <option value="0">---请选择----</option>
    </select>

    <script>
        $(function () {
            $.get("getProv", function (data) {
                alert(data);
                $(data).each(function (index, item) {
                    var ele = "<option value=\"0\">" + item.name + "</option>";
                    $("#prov").append(ele);
                });
            }, "json");
        });
    </script>
</body>
</html>

  1. mvc架子搭好
    在这里插入图片描述
  2. 写好jedis工具类 JedisUtil.java
package com.icis.utils;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class JedisUtil {
    public static JedisPoolConfig config = null;
    public static JedisPool pool = null;

    static {
        InputStream in = JedisUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
        Properties pro = new Properties();
        try {
            pro.load(in);
            config = new JedisPoolConfig();
            config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
            config.setMinIdle(Integer.parseInt(pro.getProperty("maxIdle")));
            Integer port = Integer.parseInt(pro.getProperty("port"));
            pool = new JedisPool(config, pro.getProperty("host"), port);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Jedis getJedis() {
        Jedis ret = pool.getResource();
        return ret;
    }
 
}

ProvServiceImpl.java


package com.icis.service.impl;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.icis.dao.ProvDao;
import com.icis.dao.impl.ProvDaoImpl;
import com.icis.pojo.Prov;
import com.icis.service.ProvService;
import com.icis.utils.JedisUtil;
import redis.clients.jedis.Jedis;

import java.util.List;

public class ProvServiceImpl implements ProvService {

    ProvDao dao = new ProvDaoImpl();
    ObjectMapper mp =  new ObjectMapper();

    static final Jedis JEDIS = JedisUtil.getJedis();

    @Override
    public List<Prov> getAllProv() {
        return dao.getAllProv();
    }

    /**
     * 只有第一次使用的时候去数据库查数据
     * 其他都从redis缓存里查询
     * @return 返回地理位置信息的json字符串
     */
    @Override
    public String getAllProvJson() {
        String prov_list = JEDIS.get("prov_list");
        if(prov_list == null) { //缓存里没有就从数据库读取
            List<Prov> list = getAllProv();
            try { //第一次读取的话就放到jedis缓存里
                prov_list = mp.writeValueAsString(list);
                JEDIS.set("prov_list", prov_list);
                System.out.println("第一次");
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("第很多次");
        }
        return prov_list;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值