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使用的主要内容,如果未能解决你的问题,请参考以下文章