Java连接Redis (key-value存储系统)
Redis简介:
在多线程下使用Jedis
在不同的线程中使用相同的Jedis实例会发生奇怪的错误。但是创建太多的实现也不好因为这意味着会建立很多sokcet连接,也会导致奇怪的错误发生。单一Jedis实例不是线程安全的。为了避免这些问题,可以使用JedisPool, JedisPool是一个线程安全的网络连接池。可以用JedisPool创建一些可靠Jedis实例,可以从池中拿到Jedis的实例。这种方式可以解决那些问题并且会实现高效的性能.
初始化JedisPool
JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
可以以静态的方式处理以上代码,它是线程安全的.
static {
pool = new JedisPool(new Config(), "host", 6379);
}
JedisPoolConfig包含了许多有用的redis指定的连接池的默认参数。比如,如果一个连接300秒内没有任何的返回Jedis将关闭这个连接.
可以这样使用:
Jedis jedis = pool.getResource();
try {
//随便做一些对于redis的操作
jedis.set("foo", "bar");
String foobar = jedis.get("foo");
jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike");
Set<String> sose = jedis.zrange("sose", 0, -1);
} finally {
//这里很重要,一旦拿到的jedis实例使用完毕,必须要返还给池中
pool.returnResource(jedis);
}
//程序关闭时,需要调用关闭方法
pool.destroy();
设置主/从分布
启用同步复制
Redis主要为了主/从分布而构建。这意味着"write"请求必须要指向"master", "master"会同步复制改变的内容到"slave". "read"请求可以(不是必须的)被指向"slave",缓解"master"的读写压力.
可以按以下的步骤使用"master". 为了启用同步复制,有两个方式去告诉"slave"将"slaveOf"到一个给定的"master": 1.在redis server的config文件(redis.conf)指明 2.在拿到的jedis实例中调用"slaveOf"方法并指定IP和端口
jedis.slaveOf("192.168.1.35", 6379);
注意:"slave"也是一个redis server,也可以接收"write"请求并不会报错,但是改变不会被同步复制,所以如果弄反了jedis的实例则一些操作会被覆盖.
禁用同步复制/master失败后,提升slave
如果"master"down掉,可以提升"slave"成为新的"master".首先试着禁用同步复制离线的"master",如果有几个"slave",启用同步复制其余的"slave"到新的"master".
slave1jedis.slaveofNoOne();
slave2jedis.slaveOf("192.168.1.36", 6379);
因为自己在使用Hadoop做join的时候,小表也很大,导致内存爆满,所以打算用Redis来看看。把数据加入Redis的代码如下:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException; import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool; public class RedisInutAccount { private static String parseRaw(String str) {
if (str==null) {
return "";
}
str = str.trim();
if (str.startsWith("\"")) {
str = str.substring(1);
}
if (str.endsWith("\"")) {
str = str.substring(0, str.length() - 1);
}
return str;
} public static void main(String[] args) throws IOException {
JedisPool pool = new JedisPool("192.168.2.101", 6379);
Jedis jedis = pool.getResource(); jedis.flushAll(); File file = new File("sample_account.del");
FileReader is = new FileReader(file);
BufferedReader br = new BufferedReader(is);
String tmp = null;
while ((tmp = br.readLine()) != null) {
System.out.println(tmp);
jedis.set(parseRaw(tmp), "1");
}
br.close();
pool.returnResource(jedis);
pool.destroy(); }
}
Java连接Redis (key-value存储系统)的更多相关文章
- Java连接redis的使用演示样例
Java连接redis的使用演示样例 Redis是开源的key-value存储工具,redis通经常使用来存储结构化的数据,由于redis的key能够包括String.hash.listset和sor ...
- Java连接Redis,存储对象获取对象()byte和json),连接池
Java连接Redis Jedis连接Redis,Lettuce连接Redis Jedis连接Redis 1. 创建maven项目 2. 引入依赖 <dependencies> <d ...
- 【redis数据库学习】用JAVA连接redis数据库各种报错
最近项目中,需要用到redis数据库,然后使用Jedis让JAVA连接redis. 首先,安装redis数据库,参考的是:http://www.runoob.com/redis/redis-insta ...
- java连接redis使用jedis带密码
一.引入jedis的Maven配置文件 <!-- redis连接客户端jedis --> <dependency> <groupId>redis.clients&l ...
- Java连接Redis之redis的增删改查
一.新建一个maven工程,工程可以以jar的形式或war都行,然后导入正确的依赖 <project xmlns="http://maven.apache.org/POM/4.0.0& ...
- JAVA 连接 Redis 并进行操作
1, 这里以maven项目为例 <!-- Redis NoSQL 操作依赖 --> <dependency> <groupId>redis.clients</ ...
- Java连接redis操作数据
选择2.9.0 jar 版本下载: jedis-2.9.0.jar package com.hao.redis; import org.junit.Before;import org.junit.Te ...
- 使用Java连接Redis
下载redis的驱动包:Jedis.下载地址:https://mvnrepository.com/artifact/redis.clients/jedis/2.9.0 打开IDE,我使用的是Eclip ...
- java 连接redis 以及基本操作
一.首先下载安装redis 二.项目搭建 1.搭建一个maven 工程 2. 在pom.xml文件的dependencies节点下增加如下内容: <!-- resis --> <de ...
随机推荐
- svn 回滚到上一个版本shell 脚本
#!/bin/sh ############################## # -- # # author jackluo # # Email net.webjoy@gmail.com # ## ...
- SQL 中怎么查询一个数据库中一共有多少个表
用户表:select count(*) 总表数 from sysobjects where xtype='u' 总表数:select count(*) 总表数 from sysobject s whe ...
- [LintCode] Longest Increasing Continuous Subsequence 最长连续递增子序列
Give an integer array,find the longest increasing continuous subsequence in this array. An increasin ...
- mysql慢日志管理
一.日志切割 原理: 1.cp一个慢日志备份 2.清空原理的慢日志 3.写成脚本,每天一切,这样就ok啦 二.查找日志中的慢日志 1.做了日志切割(慢日志文件就小了) 2.查找某个时间的慢日志 日志时 ...
- hdu Is It A Tree?
判定给定的边序列是否过程一棵树.我用到的判定方法是:第一步:判定 边数是否等于顶点数-1 第二:判定是否只有一个根节点 .当然还要考虑是否为空树的情况. 但是代码交上去,好几遍都是Runtime ...
- uilmit 优化
#!/bin/bash sed -i "/^ulimit -SHn.*/d" /etc/rc.local echo "ulimit -SHn 102400" & ...
- sublime3+quick智能提示
sublime3+quick智能提示 1. 安装PackegeControl 下载 https://sublime.wbond.net/Package%20Control.sublime-packag ...
- ASP.NET MVC中在Action获取提交的表单数据方法总结 (4种方法,转载备忘)
有Index视图如下: 视图代码如下: <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Mas ...
- js 获取控制台的错误信息
适合移动端调试的时候优化的报错使用.缺点是无法打印出多条记录,有方法的同学留言告诉我. <!DOCTYPE html> <html lang="en"> & ...
- 数的长度---nyoj69
超时 #include <stdio.h>#include <string.h>#define M 1000001int shu[M]; int main(){ int n, ...