• redis的java客户端之jedis


    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。Redis是 NoSQL技术阵营中的一员,它通过多种键值数据类型来适应不同场景下的存储需求,借助一些高层级的接口使用其可以胜任,如缓存、队列系统的不同角色。通过jedis可以在java客户端对redis进行一些操作。

    注意:这一篇结合上一篇redis的常用操作看更佳,连接如下:redis常用操作

    目录

    1、jedis入门案例

    2、string类型常见操作

    3、list类型常见操作

    4、hash类型常见操作

    5、set类型常见操作

    6、sorted类型常见操作

    7、key的常见操作

    8、redis数据可持久化


    1、jedis入门案例

    这里需要注意的是正常这样写会报错,我们首先需要导入jedis的jar包,同时我们需要进行如下3步操作:

    1. redis服务器是否开启,需要使用命令开启redis服务器
    2. linux的防火墙是否关闭,对于防火墙可开放对应端口,或者直接关闭防火墙,开放对应端口如下,输入:systemctl stop firewalld.service   执行停止运行防火墙命令
    3. 我们需要在redis.conf文件中设置密码,我将密码改为123456,即requirepass 123456
    1. public class RedisTest {
    2. public static void main(String[] args) {
    3. test1() ;
    4. }
    5. private static void test1() {
    6. Jedis jedis = new Jedis("192.168.102.129") ;
    7. jedis.auth("123456") ;
    8. jedis.set("foo","bar") ;
    9. System.out.println(jedis.get("foo"));
    10. }
    11. }

    2、string类型常见操作

    1. import redis.clients.jedis.Jedis;
    2. import java.util.List;
    3. public class RedisTest {
    4. private static Jedis jedis ;
    5. public static void main(String[] args) {
    6. jedis = new Jedis("192.168.102.129") ;
    7. jedis.auth("123456") ;
    8. test1() ;
    9. }
    10. private static void test1() {
    11. //测试set和get
    12. jedis.set("username","tom") ;
    13. System.out.println(jedis.get("username"));
    14. //演示mset和mget
    15. jedis.mset("password","123","age","18") ;
    16. List values = jedis.mget("username","password","age") ;
    17. System.out.println(values);
    18. //演示append,setrange,getrange
    19. jedis.append("username", " is boy") ;
    20. System.out.println(jedis.get("username"));
    21. jedis.setrange("username",7,"girl") ;
    22. System.out.println(jedis.get("username"));
    23. System.out.println(jedis.getrange("username",0,-1));
    24. }
    25. }

    3、list类型常见操作

    1. import redis.clients.jedis.BinaryClient;
    2. import redis.clients.jedis.Jedis;
    3. import java.util.List;
    4. public class RedisTest {
    5. private static Jedis jedis ;
    6. public static void main(String[] args) {
    7. jedis = new Jedis("192.168.102.129") ;
    8. jedis.auth("123456") ;
    9. test1() ;
    10. }
    11. private static void test1() {
    12. //测试lpush和lrange
    13. jedis.lpush("names","张三","李四","tom","john");
    14. List list = jedis.lrange("names",0,-1) ;
    15. System.out.println(list);
    16. //测试lset
    17. // jedis.lset("names",1,"王五") ;
    18. // List list1 = jedis.lrange("names",0,-1) ;
    19. // System.out.println(list1);
    20. System.out.println(jedis.lindex("names",1));
    21. //测试linsert
    22. jedis.linsert("names", BinaryClient.LIST_POSITION.BEFORE,"tom","steve") ;
    23. List list1 = jedis.lrange("names",0,-1) ;
    24. System.out.println(list1);
    25. //测试lrem
    26. jedis.lrem("names",2,"tom") ;
    27. List list2 = jedis.lrange("names",0,-1) ;
    28. System.out.println(list2);
    29. }
    30. }

    4、hash类型常见操作

    1. import redis.clients.jedis.Jedis;
    2. import java.util.HashMap;
    3. import java.util.List;
    4. import java.util.Map;
    5. import java.util.Set;
    6. public class RedisTest {
    7. private static Jedis jedis ;
    8. public static void main(String[] args) {
    9. jedis = new Jedis("192.168.102.129") ;
    10. jedis.auth("123456") ;
    11. test1() ;
    12. }
    13. private static void test1() {
    14. //hset和hget测试
    15. jedis.hset("user","username","tom") ;
    16. String value = jedis.hget("user","username") ;
    17. System.out.println(value);
    18. //hmset和hmget
    19. Map map = new HashMap() ;
    20. map.put("password","123") ;
    21. map.put("age","15") ;
    22. map.put("sex","male") ;
    23. map.put("username","james") ;
    24. jedis.hmset("user",map) ;
    25. List hmget = jedis.hmget("user", "username", "password", "age");
    26. System.out.println(hmget) ;
    27. //测试hgetall hkeys kvals
    28. Map user = jedis.hgetAll("user");
    29. for(String key : user.keySet()){
    30. System.out.println(key + " " + map.get(key));
    31. }
    32. Set user1 = jedis.hkeys("user");
    33. System.out.println(user1);
    34. List user2 = jedis.hvals("user");
    35. System.out.println(user2);
    36. //测试hdel
    37. jedis.hdel("user","username","password") ;
    38. Map user3 = jedis.hgetAll("user");
    39. System.out.println(user3);
    40. }
    41. }

    5、set类型常见操作

    1. import redis.clients.jedis.Jedis;
    2. import java.util.Set;
    3. public class RedisTest {
    4. private static Jedis jedis ;
    5. public static void main(String[] args) {
    6. jedis = new Jedis("192.168.102.129") ;
    7. jedis.auth("123456") ;
    8. test1() ;
    9. }
    10. private static void test1() {
    11. //测试sadd smembers
    12. jedis.sadd("language1","java","c","python","matlab") ;
    13. Set language1 = jedis.smembers("language1");
    14. System.out.println(language1);
    15. //测试srem
    16. jedis.srem("language1","c") ;
    17. Set language11 = jedis.smembers("language1");
    18. System.out.println(language11);
    19. //测试sdiff
    20. jedis.sadd("l1","java","c","IOS","android") ;
    21. jedis.sadd("l2","java","python","c++") ;
    22. Set sdiff = jedis.sdiff("l1", "l2");
    23. System.out.println(sdiff);
    24. //测试sinter
    25. Set sinter = jedis.sinter("l1", "l2");
    26. System.out.println(sinter);
    27. //测试sunion
    28. Set sunion = jedis.sunion("l1", "l2");
    29. System.out.println(sunion);
    30. }
    31. }

    6、sorted类型常见操作

    1. import redis.clients.jedis.Jedis;
    2. import redis.clients.jedis.Tuple;
    3. import java.util.HashMap;
    4. import java.util.Map;
    5. import java.util.Set;
    6. public class RedisTest {
    7. private static Jedis jedis ;
    8. public static void main(String[] args) {
    9. jedis = new Jedis("192.168.102.129") ;
    10. jedis.auth("123456") ;
    11. test1() ;
    12. }
    13. private static void test1() {
    14. //测试zadd zrange zrangeByScore
    15. Map map = new HashMap() ;
    16. map.put("张三",18.00) ;
    17. map.put("李四",19.00) ;
    18. map.put("王五",17.23) ;
    19. map.put("马六",19.02) ;
    20. jedis.zadd("zkey",map) ;
    21. Set zkey = jedis.zrange("zkey", 0, -1);
    22. System.out.println(zkey);
    23. Set zkey1 = jedis.zrangeByScore("zkey", 17, 18);
    24. System.out.println(zkey1);
    25. //zrangeWithScores
    26. Set zkey2 = jedis.zrangeWithScores("zkey", 0, -1);
    27. for(Tuple t : zkey2){
    28. System.out.println(t.getScore() + " " + t.getElement());
    29. }
    30. //zrank
    31. System.out.println(jedis.zrank("zkey","李四")) ;
    32. //zscore
    33. System.out.println(jedis.zscore("zkey","李四"));
    34. //zrem
    35. jedis.zrem("zkey","李四") ;
    36. System.out.println(jedis.zrange("zkey",0,-1));
    37. }
    38. }

    7、key的常见操作

    1. import redis.clients.jedis.Jedis;
    2. import java.util.Set;
    3. public class RedisTest {
    4. private static Jedis jedis ;
    5. public static void main(String[] args) {
    6. jedis = new Jedis("192.168.102.129") ;
    7. jedis.auth("123456") ;
    8. test1() ;
    9. }
    10. private static void test1() {
    11. //keys pattern
    12. Set s = jedis.keys("*") ;
    13. System.out.println(s);
    14. //del
    15. jedis.del("user") ;
    16. System.out.println(s);
    17. //key的时间设置
    18. jedis.expire("username",200) ;
    19. Long ttl = jedis.ttl("username");
    20. System.out.println(ttl);
    21. jedis.persist("username") ;
    22. }
    23. }

    8、redis数据可持久化

    8.1 redis数据持久化机制介绍

    1). RDB持久化:该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。   

    2). AOF(append only file)持久化:该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件来重新构建数据库,以保证启动后数据库中的数据是完整的。

    3). 同时应用AOF和RDB。

    4). 无持久化:可通过配置的方式禁用Redis服务器的持久化功能,这样我们就可以将Redis视为一个功能加强版的memcached了.

    8.2 ROB和AOF对比

    1. RDB存在哪些优势呢?

        1). 数据的备份和恢复非常方便,因为一个数据库只有一个持久化文件

        2). 性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。

        3). 相比于AOF机制,如果数据集很大,RDB的启动效率会更高。

         2.RDB又存在哪些劣势呢?

        1).系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将丢失。

        2). 由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导致整个服务器停止服务几百毫秒,甚至是1秒钟。

         3.AOF的优势有哪些呢?

    1). 该机制可以带来更高的数据安全性,即数据持久性。Redis中提供了3种同步策略,即每秒同步、每修改同步和不同步。

    2).对日志文件的写入操作采用的是append模式,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。

    3). 如果日志过大,Redis可以自动启用rewrite机制迅速“瘦身”(也可手动触发aof的rewrite操作,命令: bgrewriteaof)

        4). AOF日志格式清晰、易于理解,很容易用AOF日志文件完成数据的重建。

        4.AOF的劣势有哪些呢?

        1). 对于相同数量的数据集而言,AOF文件通常要大于RDB文件。

        2). 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。总之,每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效。

  • 相关阅读:
    智慧城市安全监控的新利器
    从零安装Redis
    7_画图常用代码
    PGCCC|【PostgreSQL】PCM认证考试大纲#postgresql 认证
    网络安全(黑客)自学
    工业制造行业的低代码开发平台思维架构图
    【路径规划】基于遗传算法求解固定的开放式多旅行推销员问题(M-TSP)附matlab代码
    在应用程序中添加shell 执行命令脚本
    Java常量池理解
    力扣-434.字符串中的单词数
  • 原文地址:https://blog.csdn.net/nuist_NJUPT/article/details/126546596