Redis-Jedis 操作 Redis
Posted MinggeQingchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis-Jedis 操作 Redis相关的知识,希望对你有一定的参考价值。
在 java 应用中操作 Redis,使用 Redis 官方推荐的 Jedis。Jedis 几乎涵盖了 Redis 的所有 命令。操作 Redis 的命令在 Jedis 中以方法的形式出现
Jedis 源码:https://github.com/xetorthio/jedis
api 文档:https://www.javadoc.io/doc/redis.clients/jedis/latest/index.html
下载:http://search.maven.org/,搜索 jedis
1、创建maven版的java工程
2、添加jedis依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>
3、Commons Pool连接池
<!--Commons-Pool-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.7.0</version>
</dependency>
Jedis 对象并不是线程安全的,在多线程下使用同一个 Jedis 对象会出现并发问题。为了避免每次使用 Jedis 对象时都需要重新构建,Jedis 提供了 JedisPool。JedisPool 是基于Commons Pool 2 实现的一个线程安全的连接池
4、创建一个Jedis连接池工具类
public class RedisUtils
//JedisPool 有一个就够用了
private static JedisPool pool;
//创建线程池
public static JedisPool open(String host,int port)
if( pool == null )
//设置线程池的参数
JedisPoolConfig config = new JedisPoolConfig();
//设置最大线程数量
config.setMaxTotal(100);
//设置空闲数
config.setMaxIdle(2);
//设置检查项为true,避免null的情况
config.setTestOnBorrow(true);
//创建JeidsPool
pool = new JedisPool(config,host,port,6000,"123456");
return pool;
//关闭线程池,在整个程序结束后执行
public static void close()
if( pool != null)
pool.close();
1、key、String操作
public class RedisStringTest
public static void main(String[] args)
//创建Jedis对象,通过Jedis的方法,操作Redis数据
String host = "127.0.0.1";// redis所在的linux的ip
int port = 6379;// redis运行的端口
Jedis jedis = new Jedis(host,port);
//设置访问密码
jedis.auth("123456");
//通过jedis的方法操作Redis数据。
jedis.set("name", "zhangsan");
//获取数据
String value = jedis.get("name");
System.out.println("name :"+value);
//创建多个key-value
jedis.mset("user","admin","pwd","123456");
//获取多个key的值
List<String> values = jedis.mget("name ","user","pwd");
//values.forEach(v -> System.out.println(v));
for(String v: values)
System.out.println(v);
//查询id = 1 Student , key == student:1
if(jedis.exists("student:1"))
String student = jedis.get("student:1");
else
//访问数据库, Student对象
//把Stuent转为json数据
jedis.set("student:1", "student");
2、list操作
public class ListRedisTest
public static void main(String[] args)
Jedis jedis = new Jedis("127.0.0.1",6379);
String key = "framework";
jedis.del(key) ;
jedis.lpush(key , "mybatis");
jedis.lpush(key, "spring" ,"springmvc");
List<String> lists= jedis.lrange(key , 0,-1);
for(String str:lists)
System.out.println("列表数据:"+str);
System.out.println("列表长度:"+jedis.llen(key));
System.out.println("新值后列表长度: " + jedis.linsert(key, ListPosition.AFTER,"spring","jpa"));//从列表右侧插入数据
jedis.rpush(key , "jsp" , "web");
System.out.println("列表数据;"+jedis.lrange(key,0,-1));
//列表数据:[ springmvc,spring,jpa,mybatis,]
System.out.println("第1个下标的值: "+jedis.lindex(key,1));
for( long i = 0;i < jedis.llen(key) ;i++)
System.out.println("弹出值:" + jedis.lpop(key));
3、set操作
public class SetRedisTest
public static void main(String[] args)
Jedis jedis = new Jedis("127.0.0.1",6379);
String key = "web";
//添加一个数据
jedis.sadd(key,"htm1");
jedis.sadd(key,"css", "javascript");
Set<String> sets = jedis.smembers(key);
//返回集合的所有成员
Iterator<String> iter = sets.iterator();
while(iter.hasNext())
System.out.println("集合Set成员:" + iter.next());
//判断set集合是否在集合中
System.out.println("flutter有吗?"+jedis.sismember(key,"flutter"));//false/集合的成员数量
System.out.println("集合成员个数:"+jedis.scard(key));
4、hash操作
public class HashRedisTest
public static void main(String[] args)
JedisPool pool = RedisUtils.open("127.0.0.1",6379);
Jedis jedis = null;
try
jedis = pool.getResource();
//jedis.hmset(String,Map<string,string> )
Map<String, String> map = new HashMap<String, String>();
map.put("username", "admin");
map.put("age", "20");
jedis.hmset("logininfo", map);
List<String> fieldValues = jedis.hmget("logininfo", "username");
for (String fv : fieldValues)
System.out.println("field值:" + fv);
System.out.println("返回boolean,存在username : " + jedis.hexists("logininfo", "username"));//查看所有的field
Set<String> set = jedis.hkeys("logininfo");
Iterator<String> iter = set.iterator();
while (iter.hasNext())
System.out.println("field name: " + iter.next());
jedis.hdel("logininfo", "age");
System.out.println("age是: " + jedis.hget("loginfo", "age")); //所有field的数量
System.out.println("feild个数: " + jedis.hlen("logininfo"));
finally
if (jedis != null)
jedis.close();
5、zset操作
public class ZSetRedisTest
public static void main(String[] args)
Jedis jedis = new Jedis("127.0.0.1",6379);
String key="salary";
jedis.del(key);
jedis.zadd(key,2000D,"John");
//使用方法: zadd(string key ,Map<string,Double>)添加多个数据
Map<String,Double> map = new HashMap<String,Double>();
map.put("Tom",3000D);
map.put("Marry",6000D);
map.put( "Rose",3600D);
map.put("Mike", 5000D);
//添加多个数据
jedis.zadd(key, map);
Set<String> sets=jedis.zrangeByScore(key,"-inf","+inf");
Iterator<String> iter= sets.iterator();
while(iter.hasNext())
System.out.println("排序小-大的成员:"+iter.next());
//带有score的数据
Set<Tuple> tuple= jedis.zrangeByScoreWithScores(key,"-inf","+inf");
Iterator<Tuple> iters = tuple.iterator();
while(iters.hasNext())
Tuple tu = iters.next();
System.out.println("排序小-大的成员:"+tu.getElement()+"#score:"+tu.getScore());
System.out.println("有序集合成员数量:" + jedis.zcard(key));
6、事务操作
public class TransactionRedis
public static void main(String[] args)
//创建Jedis对象,连接到Redis,需要提供ip和port
JedisPool pool = RedisUtils.open("127.0.0.1",6379);
Jedis jedis = null;
try
//开启事务
Transaction trans = jedis.multi();//添加字符串
trans.set( "name","zhangsan");//一次设置多个key-value
trans.mset( "user","admin", "pwd","123456");
List<Object> resultList = trans.exec();
//事务的处理结果
for(Object result : resultList)
System.out.println("成功的事务操作: " + result);
catch(Exception e)
e.printStackTrace();
finally
if (jedis != null)
jedis.close();
以上是关于Redis-Jedis 操作 Redis的主要内容,如果未能解决你的问题,请参考以下文章
Redis-Jedis使用Scan实现redis前缀key查找