redis安装与使用
软件151--熊佳杨
linux:
1、下载redis
下载redis:
可以在redis的官网下载 :
也可以去谷歌的code下载:
http://code.google.com/p/redis/downloads/list
wget http://redis.googlecode.com/files/redis-2.0.4.tar.gz
安装:
tar xvzf redis-2.0.4.tar.gz cd redis-2.0.4
./confiugr make
windows:
1、猛戳这里就到了开源首页,下载源码包,解压ZIP包后进入msvs\bin\release文件夹有三个文件分别对应32,64位,windows服务三个版本,在这里我们选择64位为例,解压redisbin64.zip 到D:\redis2.4 , 这里主要用到redis-server.exe和redis-cli.exe, redis-server用于运行Redis服务器,redis-cli是命令行客户端,通过它连接Redis服务器,并使用Redis命令进行各种操作.
2、复制源码包根目录下redis.conf到D:\redis2.4,打开CMD命令提示符,输入以下命令启动redis服务
3、启动
redis-server redis.conf
2、配置redis.conf文件
#是否作为守护进程运行 daemonize no #Redis 默认监听端口 port 6379 #客户端闲置多少秒后,断开连接 timeout 300 #日志显示级别 loglevel verbose #指定日志输出的文件名,也可指定到标准输出端口 logfile redis.log #设置数据库的数量,默认最大是16,默认连接的数据库是0,可以通过select N 来连接不同的数据库 databases 32 #Dump持久化策略 #当有一条Keys 数据被改变是,900 秒刷新到disk 一次 #save 900 1 #当有10 条Keys 数据被改变时,300 秒刷新到disk 一次 save 300 100 #当有1w 条keys 数据被改变时,60 秒刷新到disk 一次 save 6000 10000 #当dump .rdb 数据库的时候是否压缩数据对象 rdbcompression yes #dump 持久化数据保存的文件名 dbfilename dump.rdb ########### Replication ##################### #Redis的主从配置,配置slaveof则实例作为从服务器 #slaveof 192.168.0.105 6379 #主服务器连接密码 # masterauth <master-password> ############## 安全性 ########### #设置连接密码 #requirepass <password> ############### LIMITS ############## #最大客户端连接数 # maxclients 128 #最大内存使用率 # maxmemory <bytes> ########## APPEND ONLY MODE ######### #是否开启日志功能 appendonly no # AOF持久化策略 #appendfsync always #appendfsync everysec #appendfsync no ################ VIRTUAL MEMORY ########### #是否开启VM 功能 #vm-enabled no # vm-enabled yes #vm-swap-file logs/redis.swap #vm-max-memory 0 #vm-page-size 32 #vm-pages 134217728 #vm-max-threads 4
3、客户端连接
redis-cli -h 服务器 –p 端口 –a 密码 redis-cli.exe -h 127.0.0.1 -p 6379
4、常用的一些服务器管理命令:
info #查看服务器信息 select <dbsize> #选择数据库索引 select 1 flushall #清空全部数据 flushdb #清空当前索引的数据库 slaveof <服务器> <端口> #设置为从服务器 slaveof no one #设置为主服务器 shutdown #关闭服务
Java连接Redis
1、在多线程下使用Jedis
在不同的线程中使用相同的Jedis实例会发生奇怪的错误。但是创建太多的实现也不好因为这意味着会建立很多sokcet连接,也会导致奇怪的错误发生。单一Jedis实例不是线程安全的。为了避免这些问题,可以使用JedisPool, JedisPool是一个线程安全的网络连接池。可以用JedisPool创建一些可靠Jedis实例,可以从池中拿到Jedis的实例。这种方式可以解决那些问题并且会实现高效的性能.
创建JedisPool :
package com.zqgame.bl.pool;
import com.zqgame.bl.config.RedisConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class RedisPool {
private static JedisPool jedisPool = null;
public static void initialPool(RedisConfig redisConfig) {
try {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive("最大存活时间");
config.setMaxIdle("最大空闲时间");
config.setMaxWait("等待超时时间");
config.setTestOnBorrow(redisConfig.isTestOnBorrow());
jedisPool = new JedisPool(config, redisConfig.getHost(), redisConfig.getPort(),redisConfig.getTimeOut());
}catch (Exception e) {
e.printStackTrace();
}
}
//获取连接
public synchronized static Jedis getJedis() {
try {
if (jedisPool != null) {
Jedis resource = jedisPool.getResource();
return resource;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//释放连接
public static void returnResource(final Jedis jedis) {
if (jedis != null) {
jedisPool.returnResource(jedis);
}
}
}
2、redis基本操作:
package com.zqgame.bl.pool;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
/**
* redis缓存控制类
* @author zhou
* 2013-7-18
*/
public class RedisDB {
private Logger log = LoggerFactory.getLogger(RedisDB.class);
private static int REDIS_DB_INDEX = 0;//redis选择数据库 默认16个 0-15
/**
* 查询
* @param userID
* @return
*/
public String get(String userID){
Jedis jedis=null;
String val=null;
try {
jedis = RedisPool.getJedis();
jedis.select(REDIS_DB_INDEX);
val=jedis.get(userID);
} catch (Exception e) {
e.printStackTrace();
log.error("RedisDB get error"+e.getMessage(),e);
}finally{
if(jedis!=null)
RedisPool.returnResource(jedis);
}
return val;
}
/**
* 判断是否存在
* @param userID
* @return
*/
public boolean exist(String userID){
Jedis jedis=null;
boolean bool=false;
try {
jedis = RedisPool.getJedis();
jedis.select(REDIS_DB_INDEX);
bool=jedis.exists(userID);
} catch (Exception e) {
e.printStackTrace();
log.error("RedisDB exist error"+e.getMessage(),e);
}finally{
if(jedis!=null)
RedisPool.returnResource(jedis);
}
return bool;
}
/**
* 添加缓存
* @param userID
* @param map
*/
public void add(String userID,Map<String,String> m){
addMap(userID, m);
}
/**
* 添加缓存
* @param userID 用户ID
* @param val 缓存内容
*/
public void addMap(String userID,Map<String,String> m){
Jedis jedis=null;
try {
jedis = RedisPool.getJedis();
jedis.select(REDIS_DB_INDEX);
//map存入redis
jedis.hmset(userID, m);
} catch (Exception e) {
e.printStackTrace();
log.error("RedisDB add error"+e.getMessage(),e);
}finally{
if(jedis!=null)
RedisPool.returnResource(jedis);
}
}
public void del(String userID){
Jedis jedis=null;
try {
jedis = RedisPool.getJedis();
jedis.select(REDIS_DB_INDEX);
//map存入redis
jedis.del(userID);
} catch (Exception e) {
e.printStackTrace();
log.error("RedisDB del error"+e.getMessage(),e);
}finally{
if(jedis!=null)
RedisPool.returnResource(jedis);
}
}
}

浙公网安备 33010602011771号