Jedis

淡淡的烟草味﹌ 2023-09-29 18:34 51阅读 0赞

redis 应用场景

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

Windows 安装 redis:Windows下安装Redis图文教程

1. 命令行操作

redis 存储的是:key-value 格式的数据,其中 key 都是字符串,value 有5种不同的数据结构:

  • 字符串
  • 哈希类型 hashmap 格式
  • 列表类型 listlinkedlist 格式,支持重复元素
  • 集合类型 set:不允许重复
  • 有序集合类型 sortedset:不允许重复,且元素有序

1.1 字符串

  1. // 1. 存储: set key value
  2. 127.0.0.1:6379> set username zhangsan
  3. OK
  4. // 2. 获取: get key
  5. 127.0.0.1:6379> get username
  6. "zhangsan"
  7. // 3. 删除: del key
  8. 127.0.0.1:6379> del age
  9. (integer) 1

1.2 哈希类型

  1. // 1. 存储: hset key field value
  2. 127.0.0.1:6379> hset myhash username lisi
  3. (integer) 1
  4. 127.0.0.1:6379> hset myhash password 123
  5. (integer) 1
  6. // 2. 获取:
  7. // hget key field: 获取指定的field对应的值
  8. 127.0.0.1:6379> hget myhash username
  9. "lisi"
  10. // hgetall key:获取所有的field和value
  11. 127.0.0.1:6379> hgetall myhash
  12. 1) "username"
  13. 2) "lisi"
  14. 3) "password"
  15. 4) "123"
  16. // 3. 删除: hdel key field
  17. 127.0.0.1:6379> hdel myhash username
  18. (integer) 1

1.3 列表类型

列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)

  1. // 添加:
  2. // lpush key value: 将元素加入列表左表
  3. // rpush key value:将元素加入列表右边
  4. 127.0.0.1:6379> lpush myList a
  5. (integer) 1
  6. 127.0.0.1:6379> lpush myList b
  7. (integer) 2
  8. 127.0.0.1:6379> rpush myList c
  9. (integer) 3
  10. // 获取:
  11. // lrange key start end :范围获取
  12. 127.0.0.1:6379> lrange myList 0 -1
  13. 1) "b"
  14. 2) "a"
  15. 3) "c"
  16. // 删除:
  17. lpop key 删除列表最左边的元素,并将元素返回
  18. rpop key 删除列表最右边的元素,并将元素返回

1.4 集合类型

集合类型 set : 不允许重复元素

  1. // 1. 存储:sadd key value
  2. 127.0.0.1:6379> sadd myset a
  3. (integer) 1
  4. 127.0.0.1:6379> sadd myset a
  5. (integer) 0
  6. // 2. 获取:smembers key:获取set集合中所有元素
  7. 127.0.0.1:6379> smembers myset
  8. 1) "a"
  9. // 3. 删除:srem key value:删除set集合中的某个元素
  10. 127.0.0.1:6379> srem myset a
  11. (integer) 1

1.5 有序集合

有序集合类型 sortedset:不允许重复元素,且元素有顺序.每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序

  1. // 1. 存储:zadd key score value
  2. 127.0.0.1:6379> zadd mysort 60 zhangsan
  3. (integer) 1
  4. 127.0.0.1:6379> zadd mysort 50 lisi
  5. (integer) 1
  6. 127.0.0.1:6379> zadd mysort 80 wangwu
  7. (integer) 1
  8. // 2. 获取:zrange key start end [withscores]
  9. 127.0.0.1:6379> zrange mysort 0 -1
  10. 1) "lisi"
  11. 2) "zhangsan"
  12. 3) "wangwu"
  13. 127.0.0.1:6379> zrange mysort 0 -1 withscores
  14. 1) "zhangsan"
  15. 2) "60"
  16. 3) "wangwu"
  17. 4) "80"
  18. 5) "lisi"
  19. 6) "500"
  20. // 3. 删除:zrem key value
  21. 127.0.0.1:6379> zrem mysort lisi
  22. (integer) 1

1.6 通用命令

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

2. 持久化

redis 是一个内存数据库,当服务器重启数据就会丢失,redis 提供了两种方式可以将数据持久化到磁盘:

  • RDB:默认持久化方式,无需额外配置(机制就是在一定时间间隔内,检测到 key 的变化情况然后持久化)
  • AOF:日志记录的方式,可以记录每条命令的操作,每次命令操作后,持久化数据

RDB

RDB 形式有三种模式,详情可见 redis.windwos.conf

  1. # after 900 sec (15 min) if at least 1 key changed,900s 内至少有一个 key 改变了
  2. save 900 1
  3. # after 300 sec (5 min) if at least 10 keys changed,300s 内至少有 10个 key 被改变
  4. save 300 10
  5. # after 60 sec if at least 10000 keys changed,60s 内至少有 10000 key 被改变
  6. save 60 10000

修改了配置文件,需重启服务:redis-server.exe redis.windows.conf

AOF

AOF 也有三种模式,编辑redis.windwos.conf 文件

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

3. Jedis

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

基本操作

所需依赖包:jedis-2.7.0.jar

  1. package com.hubery.basic;
  2. import redis.clients.jedis.Jedis;
  3. public class JedisDemo1 {
  4. public static void main(String[] args) {
  5. // 获取连接
  6. Jedis jedis = new Jedis("localhost", 6379);
  7. // 操作
  8. jedis.set("username", "zhangsan");
  9. // 关闭
  10. jedis.close();
  11. }
  12. }

3.1 Jedis 操作 redis 的各种数据结构

1、字符串

  1. jedis.set("username","zhangsan");
  2. String username = jedis.get("username");
  3. // setex 可设置 key 过期时间,单位秒
  4. jedis.setex("activecode",20,"hehe");

2、哈希类型

  1. jedis.hset("user","name","lisi");
  2. String name = jedis.hget("user", "name");
  3. // 获取hash的所有map中的数据
  4. Map<String, String> user = jedis.hgetAll("user");
  5. // keyset
  6. Set<String> keySet = user.keySet();
  7. for (String key : keySet) {
  8. //获取value
  9. String value = user.get(key);
  10. System.out.println(key + ":" + value);
  11. }

3、列表类型

  1. // list 存储
  2. jedis.lpush("mylist","a","b","c");//从左边存
  3. jedis.rpush("mylist","a","b","c");//从右边存
  4. // list 范围获取
  5. List<String> mylist = jedis.lrange("mylist", 0, -1);
  6. System.out.println(mylist);
  7. // list 弹出
  8. String element1 = jedis.lpop("mylist");//c
  9. System.out.println(element1);
  10. String element2 = jedis.rpop("mylist");//c
  11. System.out.println(element2);
  12. // list 范围获取
  13. List<String> mylist2 = jedis.lrange("mylist", 0, -1);
  14. System.out.println(mylist2);

4、集合类型

  1. // set 存储
  2. jedis.sadd("myset","java","php","c++");
  3. // set 获取
  4. Set<String> myset = jedis.smembers("myset");
  5. System.out.println(myset);

5、有序集合类型

  1. // sortedset 存储
  2. jedis.zadd("mysortedset",3,"亚瑟");
  3. jedis.zadd("mysortedset",30,"后裔");
  4. jedis.zadd("mysortedset",55,"孙悟空");
  5. // sortedset 获取
  6. Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);

3.2 JedisPool 连接池

所需依赖:commons-pool2-2.3.jar

1、工具类 JedisPoolUtils.java

  1. package com.hubery.utils;
  2. import redis.clients.jedis.Jedis;
  3. import redis.clients.jedis.JedisPool;
  4. import redis.clients.jedis.JedisPoolConfig;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.util.Properties;
  8. /**
  9. JedisPool工具类
  10. 加载配置文件,配置连接池的参数
  11. 提供获取连接的方法
  12. */
  13. public class JedisPoolUtils {
  14. private static JedisPool jedisPool;
  15. static {
  16. // 读取配置文件
  17. InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
  18. // 创建 properties 对象
  19. Properties pro = new Properties();
  20. try {
  21. pro.load(is);
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. }
  25. // 获取数据,设置到 JedisPoolConfig 中
  26. JedisPoolConfig config = new JedisPoolConfig();
  27. config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
  28. config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
  29. // 初始化连接池
  30. jedisPool = new JedisPool(config, pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));
  31. }
  32. /**
  33. * 获取连接
  34. */
  35. public static Jedis getJedis() {
  36. return jedisPool.getResource();
  37. }
  38. }

2、配置 src/jedis.properties

  1. host=127.0.0.1
  2. port=6379
  3. maxTotal=50
  4. maxIdle=10

3、使用 JedisPoolDemo.java

  1. package com.hubery.pool;
  2. import com.hubery.utils.JedisPoolUtils;
  3. import redis.clients.jedis.Jedis;
  4. public class JedisPoolDemo {
  5. public static void main(String[] args) {
  6. // 从连接池中获取连接
  7. Jedis jedis = JedisPoolUtils.getJedis();
  8. String username = jedis.get("username");
  9. System.out.println(username);
  10. // 归还连接
  11. jedis.close();
  12. }
  13. }

发表评论

表情:
评论列表 (有 0 条评论,51人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Jedis

    redis 应用场景 缓存(数据查询、短连接、新闻内容、商品内容等等) 聊天室的在线好友列表 任务队列。(秒杀、抢购、12306等等) 应用排行榜

    相关 jedis使用

    一、Redis Client介绍 1.1、简介 Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对各类API进行封装调用。 Jedis源

    相关 Jedis 初探

    Jedis是java操作redis的jar包 先说一下如何连接redis 比如在linux操作系统上的话,进入目录,输入 "./redis cli"即可登录。 如果设置了

    相关 Jedis

    参考资料 Redis 单点模式和集群模式代码测试及问题记录:https://blog.csdn.net/boonya/article/details/49466003 Je

    相关 Jedis连接

    Jedis连接 到场api中的jedis。我们能够发现,jedis类提供了4个构造方法。都可用于连接: ![20141009172808406][] ![Cente