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);
}
}
}
最新文章
- js 爱恨情仇说 this
- Python教程[廖雪峰],主要是实践
- 转载-python学习笔记之输入输出功能读取和写入数据
- js中__proto__(内部原型)和prototype(构造器原型)的关系
- JSP——九大内置对象和其四大作用域
- 【IE6的疯狂之五】div遮盖select的解决方案
- python使用mongodb
- 混合高斯模型(Mixtures of Gaussians)和EM算法
- C#无限分级实现,前端WEB页面接收,后台提供层级Json数据
- C# 链接MySql数据库
- 进入django
- React Native实现微信分享
- Pycharm---新建文件时 自动添加作者时间等信息
- 2-Thirteenth Scrum Meeting-10151213
- Solr记录-solr内核与索引
- 使用HttpGet协议与正则表达实现桌面版的糗事百科
- 在js中保存数据
- 【转】嵌入式Linux文件系统启动脚本及分析
- CentOS6.7 通过yum在线安装MySQL5.7
- Apache 访问控制