Java操作redis

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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. }  
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
18天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
32 1
|
2月前
|
缓存 NoSQL Java
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
64 3
大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁
|
2月前
|
缓存 NoSQL Java
Java中redis面试题
Java中redis面试题
42 1
|
1月前
|
存储 NoSQL Java
Java 使用 Redis
10月更文挑战第22天
32 0
|
2月前
|
NoSQL Java API
Java操作redis
Java操作redis
|
存储 NoSQL Java
在java中使用redis
在java中使用redis很简单,只需要添加jedist.jar,通过它的api就可以了。而且,api和redis的语法几乎完全相同。以下简单的测试: 参考:http://www.runoob.com/redis/redis-java.
1007 0
|
2月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
78 6
|
17天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
18天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构
|
11天前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
30 5