redis笔记--------Jedis使用

Posted 小宝的进化之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis笔记--------Jedis使用相关的知识,希望对你有一定的参考价值。

redis安装和启动就不说了

一.准备工作

 1.redis -cli -p 6379

2.eclipse中新建项目,并导入jedis相关包

3.测试jedis连通性

 

二.Jedis常用API (哈希)

1.基础的key  value

 

 

 存中文,取数据时在eclipse控制台会显示中文,但是在linux上回出现中文乱码问题(其实不是乱码,只是不是我们存的中文显示)。使用redis-cli  --raw进入 就不会出现上述问题

2.Hash:总体来说KV模式不变,但V是一个键值对

(1)hset
描述:将哈希表key中的域field的值设为value。如果key不存在,一个新的哈希表被创建并进行HSET操作。如果域field已经存在于哈希表中,旧值将被覆盖。
参数:key field value
返回值:如果field是哈希表中的一个新建域,并且值设置成功,返回1。如果哈希表中域field已经存在且旧值已被新值覆盖,返回0

jedis.hset("key1", "field1", "field1-value"); 
		jedis.hset("key1", "field2", "field2-value"); 
		String content=jedis.hget("key1","field1");//hget的使用
		System.out.println(content);

 (2)hmset
描述:同时将多个field - value(域-值)对设置到哈希表key中。此命令会覆盖哈希表中已存在的域。如果key不存在,一个空哈希表被创建并执行HMSET操作。
参数:key field value [field value ...]
返回值:如果命令执行成功,返回OK。当key不是哈希表(hash)类型时,返回一个错误。

 

 Map map = new HashMap(); 
		map.put("field1", "field1-value"); 
		map.put("field2", "field2-value"); 
		jedis.hmset("key1", map); 
		List<String> list = jedis.hmget("key1","field1");//hmget
        System.out.println(list);

 (3)返回 key 指定的哈希集中所有的字段和值。返回值中,每个字段名的下一个是它的值,所以返回值的长度是哈希集大小的两倍

 

(4)hdel

 (5)hlen

 

(6)hexists

(7)hkeys/hvals

hgetall同时返回哈希表里的键和值,hkeys返回哈希表里的键,hvals返回哈希表里的值

(8)hincrby|hincrbyfloat

 

 (9)hsetnx

将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。

若域 field 已经存在,该操作无效。

如果 key 不存在,一个新哈希表被创建并执行 hsetnx 命令。

返回值:
设置成功,返回 1
如果给定域已经存在且没有操作被执行,返回 0

三.Redis事务

 Discard 取消事务

Exec 执行

multi 开启事务

unwatch 取消 watch命令对所有key的监视

watch 监视一个或多个key,如果在事务执行之前,这个key被其他命令改动,那么事务将被打断

redis事务阶段:

(1)开启:以multi开启一个事务

(2)入队

(3)执行:由exec命令触发事务

redis事务不保证原子性:redis同一个事务中如果一条命令执行失败,其后的命令仍会被执行,没有回滚

 

四.Jedis主从复制

public class TestMS {
	public static void main(String[] args) {
		Jedis jedis_M = new Jedis("192.168.172.128",6379);
		Jedis jedis_S = new Jedis("192.168.172.128",6380);
	System.out.println(jedis_M.ping());
	System.out.println(jedis_S.ping());
		jedis_S.slaveof("192.168.172.128",6379);
		
		jedis_M.set("class","1122V2");
		
		String result = jedis_S.get("class");
		System.out.println(result);
	}
}

 如果出现NULL,别慌。因为内存速度太快了,等一会在执行一次就好了

五.JedisPool

package com.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisPoolUtil 
{
	private static volatile JedisPool jedisPool = null;
	
	private JedisPoolUtil(){}
	
	public static JedisPool getJedisPoolInstance()
	{
		if(null == jedisPool)
		{
			synchronized (JedisPoolUtil.class)
			{
				if(null == jedisPool)
				{
					JedisPoolConfig poolConfig = new JedisPoolConfig();
					poolConfig.setMaxActive(1000);
					poolConfig.setMaxIdle(32);
					poolConfig.setMaxWait(100*1000);
					poolConfig.setTestOnBorrow(true);

					jedisPool = new JedisPool(poolConfig,"127.0.0.1",6379);
				}
			}
		}
		return jedisPool;
	}

	public static void release(JedisPool jedisPool,Jedis jedis)
	{
		if(null != jedis)
		{
			jedisPool.returnResourceObject(jedis);
		}
	}
	
}

 

package com.test;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class TestPool {

	public static void main(String[] args) {
		JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance();
		JedisPool jedisPool2 = JedisPoolUtil.getJedisPoolInstance();

		System.out.println(jedisPool == jedisPool2);

		Jedis jedis = null;
		try {
			jedis = jedisPool.getResource();
			jedis.set("aa", "bb");
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JedisPoolUtil.release(jedisPool, jedis);
		}
	}
}

 

以上是关于redis笔记--------Jedis使用的主要内容,如果未能解决你的问题,请参考以下文章

Redis 学习笔记Jedis & Lettuce

Redis学习笔记jedis(JedisCluster)操作Redis集群 redis-cluster

Redis学习笔记

Redis学习笔记5:JedisRedisTemplate

Redis学习笔记5:JedisRedisTemplate

Redis学习笔记-管道/分布式