03. redis的java客户端jedis

Redis的Java客户端Jedis

Jedis:一款java操作redis数据库的工具

一、使用步骤

  1. 导入相关的jar包

    • commons-pool2-2.3.jar
    • jedis-2.7.0.jar
  2. 获取连接(默认本机,端口6379)

Jedis jedis = new Jedis(); // 默认本机,端口6379
Jedis jedis = new Jedis("localhost", 6379);
  1. 操作
jedis.set("username", "晓庆");
  1. 关闭链接
jedis.close();

二、Jedis操作各种redis中的数据结构

接口方法和基本命令语法是一样的!,下面的案例省略连接和关闭步骤

1.字符串类型string

  1. set 设置;
jedis.set("username", "小红");
  1. get 获取
String username = jedis.get("username");
  1. setex(key, lifetime秒, value): 指定过期时间
jedis.setex("username",5,  "小红");
  1. del: 删除(通用)
jedis.del("username");

2.hash类型: map格式

  1. hset: 设置
jedis.hset("user", "name", "晓庆");
jedis.hset("user", "age", "18");
jedis.hset("user", "gender", "male");
  1. hget: 获取一个
String name = jedis.hget("user", "name");
  1. hgetAll:获取所有
Map<String, String> map = jedis.hgetAll("user");
map.forEach((key, value) -> System.out.println(key + ":" + value));
  1. hdel:删除
jedis.hdel("user", "name");

3.列表类型list: linkedList格式,支持重复元素

  1. lpush/rpush: 列表左边/右边添加
jedis.lpush("myList", "a", "b", "c");
jedis.rpush("myList", "1", "2", "3");
  1. lrange start end: 范围获取
List<String> myList = jedis.lrange("myList", 0, -1);
myList.forEach(System.out::print);
  1. lpop/rpop: 删除:列表左边/右边出队列
String lPop = jedis.lpop("myList");

String rPop = jedis.rpop("myList");

4.集合类型set:

不允许重复的元素

  1. sadd:添加
jedis.sadd("mySet", "java", "python", "c", "javaScript");
  1. smembers:获取所有元素
Set<String> set = jedis.smembers("mySet");
set.forEach(System.out::print);
  1. srem:删除
jedis.srem("mySet", "javaScript");

5.有序集合sortedset:

不允许重复元素,且元素有序

  1. zadd: 添加
jedis.zadd("score", 80, "齐天大圣");
jedis.zadd("score", 25, "弼马温");
jedis.zadd("score", 100, "斗战胜佛");
  1. zrange: 范围获取
Set<String> set = jedis.zrange("score", 0, -1);
set.forEach(System.out::print);
  1. zrem: 删除
jedis.zrem("score", "弼马温");

6.通用命令

统一处理

1.查找所有的键

jedis.keys("*").forEach(System.out::print);

2.查询类型

jedis.type("score");

3.集体删除del(String[] str) 可变长参数

String[] strs = {"score", "myset", "user", "mylist"};
jedis.del(strs);

三、Jedis连接池:JedisPool

1.JedisPoll基本使用

  • 使用步骤
    • 1.(可选)创建一个配置对象
    • 2.创建Jedis连接池对象(可选:传参->配置)
    • 3.获取连接
    • 4.使用
    • 5.归还连接
// 1. 创建一个配置对象【可选】
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50); // 最大允许的连接数
config.setMaxIdle(10);  // 最大空闲连接

// 创建Jedis连接池对象
// 2.1 默认配置、关闭连接池
JedisPool jedisPool0 = new JedisPool();
jedisPool0.close();

// 2.2 指定配置文件
JedisPool jedisPool = new JedisPool(config, "localhost", 6379);

// 3. 获取连接
Jedis jedis = jedisPool.getResource();

// 4. 使用
jedis.set("name", "小懒");

// 5. 归还连接池
jedis.close();

2.JedisPoll连接池配置介绍

jedis.properties配置介绍

# 最大活动对象数
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

3.连接池工具类实现

  1. 配置文件jedis.properties
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10
  1. JedisPoolUtils.java
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 JedisPoolUtils {

    private static JedisPool jedisPool;

    static {
        // 读取配置文件
        Properties pro = new Properties();
        InputStream in = JedisPoolUtils.class
                .getClassLoader()
                .getResourceAsStream("jedis.properties");
        try {
            pro.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            // ?这个地方需要关闭流不?
            try {
                in.close();
            } 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();
    }
}

四、小试牛刀

1.需求

  1. 提供index.html页面,页面中有一个省份 下拉列表
  2. 当 页面加载完成后 发送ajax请求,加载所有省份

2.友情提示

数据库的数据一旦发生改变,则需要更新缓存

  1. 数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入
  2. 在service对应的增删改方法中,将redis数据删除。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容