Java操作redis

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

Java操作redis很简单。创建一个普通的Java工程。然后导入redis依赖的jar包。jar包我已经上传了。

1.入门级的demo

入门级demo代码   收藏代码
  1. package com.bjsxt.test;  
  2.   
  3. import redis.clients.jedis.Jedis;  
  4.   
  5. public class RedisDemo {  
  6.       
  7.     public static Jedis getJedis(){  
  8.         Jedis jedis = null;  
  9.         jedis = new Jedis(FinalCollention.IP, 6379);  //redis服务器的ip和端口  
  10.         jedis.auth(FinalCollention.PASSWORD);  //连接redis的密码  
  11.         return jedis;  
  12.     }  
  13.     public void test(){  
  14.         Jedis jedis = null;  
  15.         try{  
  16.             jedis = getJedis();  
  17.             jedis.incr("test");  
  18.             long dbsize = jedis.dbSize();  
  19.             System.out.println("数据库大小:"+dbsize);  
  20.             System.out.println("测试test的值:"+jedis.get("test"));  
  21.               
  22.         }catch(Exception e){  
  23.             e.printStackTrace();  
  24.         }finally{  
  25.             if(jedis != null){  
  26.                 jedis.disconnect();  
  27.             }  
  28.         }  
  29.     }  
  30.     public static void main(String[] args) {  
  31.         RedisDemo demo = new RedisDemo();  
  32.         demo.test();  
  33.     }  
  34. }  

 

如果出现Java无法连接redis的异常,主要有三个方面的问题:

1.Java运行的主机ping一下redis服务器所在主机,看能否ping通

2.关闭redis服务器所在主机的防火墙

3.打开redis安装目录下的redis.conf文件。注释掉:bind 127.0.0.1这句话

注释掉bind代码   收藏代码
  1. # Accept connections on the specified port, default is 6379.  
  2. # If port 0 is specified Redis will not listen on a TCP socket.  
  3. port 6379  
  4.   
  5. # If you want you can bind a single interface, if the bind option is not  
  6. # specified all the interfaces will listen for incoming connections.  
  7. #  
  8. # bind 127.0.0.1  
  9. "redis.conf" 597L, 25667C written  

 特别说明:后面的实例,我就不使用try--catch了,但是自己写时一定要记着关闭连接

2.Java操作redis的各种数据结构

Redis的各种数据类型测试代码   收藏代码
  1. package com.bjsxt.test;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.List;  
  5. import java.util.Map;  
  6.   
  7. import redis.clients.jedis.Jedis;  
  8.   
  9. public class RedisDataTypeDemo {  
  10.       
  11.     public static Jedis getJedis(){  
  12.         Jedis jedis = null;  
  13.         jedis = new Jedis(FinalCollention.IP, 6379);  //redis服务器的ip和端口  
  14.         jedis.auth(FinalCollention.PASSWORD);  //连接redis的密码  
  15.         return jedis;  
  16.     }  
  17.     /**  
  18.      *   
  19.      * @title demoKey  
  20.      * @description 测试Key  
  21.      * @author hadoop  
  22.      */  
  23.     public void demoKey(){  
  24.         Jedis jedis = RedisDataTypeDemo.getJedis();  
  25.         System.out.println("查看键为aa的是否存在:"+jedis.exists("aa"));  
  26.         System.out.println("查看键为aa的类型:"+jedis.type("aa"));  
  27.         System.out.println("随机获得一个key:"+jedis.randomKey());  
  28.         System.out.println("将aa重命名为bb:"+jedis.rename("aa""bb"));  
  29.         System.out.println("删除bb:"+jedis.del("bb"));  
  30.         //从上面的方法可以看出,redis提供的接口方法名和redis-cli客户端提供的方法名是一样的,所以,只要对redis客户端的命令熟悉,那么Java操作redis就不是问题  
  31.     }  
  32.     /**  
  33.      *   
  34.      * @title demoString  
  35.      * @description 测试String  
  36.      * @author hadoop  
  37.      */  
  38.     public void demoString(){  
  39.         Jedis jedis = RedisDataTypeDemo.getJedis();  
  40.         System.out.println("设置name:"+jedis.set("name""小花"));  
  41.         System.out.println("设置name1:"+jedis.set("name1""小花1"));  
  42.         System.out.println("设置那么2:"+jedis.set("name2""小花2"));  
  43.         System.out.println("设置name,如果存在返回0:"+jedis.setnx("name""小花哈哈"));  
  44.         System.out.println("获取key为name和name1的value值:"+jedis.mget("name","name1"));  
  45.         System.out.println("自增1:"+jedis.incr("index"));  
  46.         System.out.println("自增1:"+jedis.incr("index"));  
  47.         System.out.println("自增2:"+jedis.incrBy("count"2));  
  48.         System.out.println("自增2:"+jedis.incrBy("count"2));  
  49.         System.out.println("递减1:"+jedis.decr("count"));  
  50.         System.out.println("递减2:"+jedis.decrBy("index",2));  
  51.         System.out.println("在name后面添加String:"+jedis.append("name"",我爱你"));  
  52.         System.out.println("获取key为name的值:"+jedis.get("name"));  
  53.           
  54.     }  
  55.     /**  
  56.      *   
  57.      * @title demoList  
  58.      * @description 测试list数据类型  
  59.      * @author hadoop  
  60.      */  
  61.     public void demoList(){  
  62.         Jedis jedis = RedisDataTypeDemo.getJedis();  
  63.         //在头添加  
  64.         jedis.lpush("list""hadoop","hbase","hive","pig","zookeeper");  
  65.         //在末尾添加  
  66.         jedis.rpush("list""java","struts");  
  67.         //返回长度  
  68.         jedis.llen("list");  
  69.         //取值  
  70.         List<String> list = jedis.lrange("list"0, -1);  
  71.         for (String string : list) {  
  72.             System.out.println(string);  
  73.         }  
  74.     }  
  75.     /**  
  76.      *   
  77.      * @title demoSet  
  78.      * @description 测试set数据类型  
  79.      * @author hadoop  
  80.      */  
  81.     public void demoSet(){  
  82.         Jedis jedis = RedisDataTypeDemo.getJedis();  
  83.         jedis.sadd("city""北京","上海","重启","武汉");  
  84.         System.out.println("取出最上面的:"+jedis.spop("city"));  
  85.         System.out.println("随机取出一个值"+jedis.srandmember("city"));  
  86.         jedis.sadd("city2""北京","武汉","河北","张家界","辽林");  
  87.         System.out.println("交集:"+jedis.sinter("city","city1"));  
  88.         System.out.println("并集:"+jedis.sunion("city","city1"));  
  89.         System.out.println("差集:"+jedis.sdiff("city","city1"));  
  90.           
  91.     }  
  92.     /**  
  93.      *   
  94.      * @title demoMap  
  95.      * @description 测试map数据类型  
  96.      * @author hadoop  
  97.      */  
  98.     public void demoMap(){  
  99.         Jedis jedis = RedisDataTypeDemo.getJedis();  
  100.         jedis.hset("Mcity""c1""北京");  
  101.         System.out.println("取值:"+jedis.hget("city""c1"));  
  102.         Map<String,String> mcity = new HashMap<String, String>();  
  103.         mcity.put("c1""桂林");  
  104.         mcity.put("c2""天津");  
  105.         mcity.put("c3""合肥");  
  106.         jedis.hmset("Mcity2", mcity);  
  107.         List<String> list =  jedis.hmget("Mcity2""c1","c2","c3");  
  108.         for (String string : list) {  
  109.             System.out.println(string);  
  110.         }  
  111.         System.out.println(jedis.hlen("Mcity2"));  
  112.     }  
  113.     //测试  
  114.     public static void main(String[] args) {  
  115.         RedisDataTypeDemo rdr = new RedisDataTypeDemo();  
  116.         rdr.demoKey();  
  117.         rdr.demoList();  
  118.         rdr.demoMap();  
  119.         rdr.demoSet();  
  120.         rdr.demoString();  
  121.     }  
  122. }  

 3.Java操作redis的管道

管道代码   收藏代码
  1. package com.bjsxt.test;  
  2.   
  3. import redis.clients.jedis.Jedis;  
  4. import redis.clients.jedis.Pipeline;  
  5.   
  6. public class RedisPipelineDemo {  
  7.     public static Jedis getJedis(){  
  8.         Jedis jedis = null;  
  9.         jedis = new Jedis(FinalCollention.IP, 6379);  //redis服务器的ip和端口  
  10.         jedis.auth(FinalCollention.PASSWORD);  //连接redis的密码  
  11.         return jedis;  
  12.     }  
  13.       
  14.     public void hasPipeline(){  
  15.         Jedis jedis = RedisPipelineDemo.getJedis();  
  16.         System.out.println("开始:"+System.currentTimeMillis());  
  17.         Pipeline pl = jedis.pipelined();  
  18.         for(int i = 0 ; i < 1000 ; i++){  
  19.             pl.incr("testPL");  
  20.         }  
  21.         pl.sync();  
  22.         System.out.println("开始:"+System.currentTimeMillis());  
  23.     }  
  24.       
  25.     public void noPipeline(){  
  26.         Jedis jedis = RedisPipelineDemo.getJedis();  
  27.         System.out.println("开始:"+System.currentTimeMillis());  
  28.         for(int i = 0 ; i < 1000 ; i++){  
  29.             jedis.incr("testPL");  
  30.         }  
  31.         System.out.println("开始:"+System.currentTimeMillis());  
  32.     }  
  33. }  

 4.redis事务

Redis事务代码   收藏代码
  1. package com.bjsxt.test;  
  2.   
  3. import java.util.List;  
  4.   
  5. import redis.clients.jedis.Jedis;  
  6. import redis.clients.jedis.Transaction;  
  7.   
  8. public class RedisTXDemo {  
  9.     public static Jedis getJedis(){  
  10.         Jedis jedis = null;  
  11.         jedis = new Jedis(FinalCollention.IP, 6379);  //redis服务器的ip和端口  
  12.         jedis.auth(FinalCollention.PASSWORD);  //连接redis的密码  
  13.         return jedis;  
  14.     }  
  15.     /**  
  16.      *   
  17.      * @title txDemo  
  18.      * @description 没有异常的事务  
  19.      * @author hadoop  
  20.      */  
  21.     public void txDemo(){  
  22.         Jedis jedis = getJedis();  
  23.         //开启事务  
  24.         Transaction tx = jedis.multi();  
  25.           
  26.         tx.set("txcity""beijin");  
  27.         tx.sadd("hi""abc");  
  28.         tx.get("txcity");  
  29.         List<Object> objs = tx.exec();  
  30.           
  31.         for (Object object : objs) {  
  32.             System.out.println(object.toString());  
  33.         }  
  34.     }  
  35.       
  36.     /**  
  37.      *   
  38.      * @title txHasExDemo  
  39.      * @description 含有异常的事务  
  40.      * @author hadoop  
  41.      */  
  42.     public void txHasExDemo(){  
  43.         Jedis jedis = getJedis();  
  44.         //开启事务  
  45.         Transaction tx = jedis.multi();  
  46.           
  47.         tx.set("txcity1""beijin");  
  48.         tx.sadd("hi1""abc");  
  49.         int i = 1/0;  
  50.         tx.get("txcity1");  
  51.         List<Object> objs = tx.exec();  
  52.           
  53.         for (Object object : objs) {  
  54.             System.out.println(object.toString());  
  55.         }  
  56.     }  
  57.       
  58.     public static void main(String[] args) {  
  59.         RedisTXDemo redisTXDemo = new RedisTXDemo();  
  60.         redisTXDemo.txDemo();  
  61.         redisTXDemo.txHasExDemo();  
  62.     }  
  63. }  
相关文章
|
10天前
|
存储 SQL NoSQL
Redis-常用语法以及java互联实践案例
本文详细介绍了Redis的数据结构、常用命令及其Java客户端的使用,涵盖String、Hash、List、Set、SortedSet等数据类型及操作,同时提供了Jedis和Spring Boot Data Redis的实战示例,帮助开发者快速掌握Redis在实际项目中的应用。
144 1
Redis-常用语法以及java互联实践案例
|
3月前
|
缓存 监控 NoSQL
Redis 实操要点:Java 最新技术栈的实战解析
本文介绍了基于Spring Boot 3、Redis 7和Lettuce客户端的Redis高级应用实践。内容包括:1)现代Java项目集成Redis的配置方法;2)使用Redisson实现分布式可重入锁与公平锁;3)缓存模式解决方案,包括布隆过滤器防穿透和随机过期时间防雪崩;4)Redis数据结构的高级应用,如HyperLogLog统计UV和GeoHash处理地理位置。文章提供了详细的代码示例,涵盖Redis在分布式系统中的核心应用场景,特别适合需要处理高并发、分布式锁等问题的开发场景。
266 40
|
3月前
|
缓存 NoSQL Java
Java Redis 面试题集锦 常见高频面试题目及解析
本文总结了Redis在Java中的核心面试题,包括数据类型操作、单线程高性能原理、键过期策略及分布式锁实现等关键内容。通过Jedis代码示例展示了String、List等数据类型的操作方法,讲解了惰性删除和定期删除相结合的过期策略,并提供了Spring Boot配置Redis过期时间的方案。文章还探讨了缓存穿透、雪崩等问题解决方案,以及基于Redis的分布式锁实现,帮助开发者全面掌握Redis在Java应用中的实践要点。
191 6
|
5月前
|
NoSQL Java API
在Java环境下如何进行Redis数据库的操作
总的来说,使用Jedis在Java环境下进行Redis数据库的操作,是一种简单而高效的方法。只需要几行代码,就可以实现复杂的数据操作。同时,Jedis的API设计得非常直观,即使是初学者,也可以快速上手。
274 94
|
7月前
|
Linux 网络安全 Docker
尼恩一键开发环境: vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
尼恩提供了一系列文章,旨在帮助开发者轻松搭建一键开发环境,涵盖Java分布式、高并发场景下的多种技术组件安装与配置。内容包括但不限于Windows和CentOS虚拟机的安装与排坑指南、MySQL、Kafka、Redis、Zookeeper等关键组件在Linux环境下的部署教程,并附带详细的视频指导。此外,还特别介绍了Vagrant这一虚拟环境部署工具,
尼恩一键开发环境: vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
|
Java Android开发
WSDL2Java操作指南
1. 安装JDK1.5, 配置系统环境变量:     下载安装JDK后, 设置环境变量:     JAVA_HOME=C:\Program Files\Java\jdk1.5.0_02     Path=%Path%;%JAVA_HOME%\bin(这里的%Path%指你系统已经有的一系列配置)     CLASSPATH=%JAVA_HOME%\lib  2. 下载axis,
1520 0
|
10天前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
46 0
|
22天前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
56 16
|
1月前
|
缓存 并行计算 安全
关于Java多线程详解
本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。