您的位置:首页 > 数据库 > Redis

Redis学习记录

2016-11-07 14:17 387 查看
前言:
Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统。和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。在此基础上,Redis支持各种不同方式的排序。

和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失。所以Memcache的应用场景适用于缓存无需持久化的数据。而Redis不同的是它会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,实现数据的持久化。

Redis官方网网站是:http://www.redis.io/

windows环境下,http://www.redis.io/download  下载安装文件,安装即可。

Linux环境下,参考:http://www.jb51.net/article/79096.htm   http://www.linuxdiyf.com/linux/13401.html 
Redis客户端工具:win8环境嫌安装redis-desktop-manager麻烦,干脆用redisclient,下载安装即可

1、pom.xml中引入如下jar:

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>
<!-- 序列化工具-->
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId>protostuff-core</artifactId>
<version>1.0.12</version>
</dependency>
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId>protostuff-runtime</artifactId>
<version>1.0.12</version>
</dependency>

2、spring配置文件创建redis访问资源路径:

<!-- 配置redis访问路径 -->
<bean id="redisDao" class="com.lcsuo.dao.RedisDao">
<constructor-arg index="0" value="127.0.0.1" />
<constructor-arg index="1" value="6379" />
</bean>

3、编写RedisDao类

package com.lcsuo.dao;

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

import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.ProtobufIOUtil;
import com.dyuproject.protostuff.runtime.RuntimeSchema;

public class RedisUtils {

private static JedisPool jedisPool;
private static final String PASSWORD = "123456";

public RedisUtils(String ip, int port){
this.jedisPool = new JedisPool(ip, port);
}

/**
* 设置单个值
*
* @param key
* @param value
* @return
*/
public static String set(String key, String value) {
return set(0, key, value, 0);
}

/**
* 设置单个值
*
* @param dbNumber 指定数据库
* @param key
* @param value
* @param expire有效时间单位 秒,为0时不失效
* @return
*/
public static String set(int dbNumber,String key, String value,int expire) {
try(Jedis jedis = jedisPool.getResource()){
jedis.auth(PASSWORD);
return jedis.set(key, value);
}catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* 获取单个值
*
* @param key
* @return
*/
public static String get(String key) {
return get(0, key);
}

/**
* 获取单个值
*
* @param key
* @return
*/
public static String get(int dbNumber,String key) {
try(Jedis jedis = jedisPool.getResource()){
jedis.auth(PASSWORD);
return jedis.get(key);
}catch (Exception e) {
e.printStackTrace();
}
return null;
}

public static Object setObject(String key, Object obj){
return setObject(0,key,obj,0);
}

/**
* 保存对象
* @param key
* @param obj
* @return
*/
public static Object setObject(int dbNumber, String key, Object obj, int expire){
RuntimeSchema<Object> schema = RuntimeSchema.createFrom(Object.class);
try(Jedis jedis = jedisPool.getResource()){
jedis.auth(PASSWORD);
//序列化
byte[] byteArray = ProtobufIOUtil.toByteArray(obj, schema,
LinkedBuffer.allocate(512));
int seconds = 3600;
return jedis.setex(key.getBytes(), seconds, byteArray);
}catch (Exception e) {
e.printStackTrace();
}
return null;
}

public static Object getObject(String key){
getObject(0,key);
return null;
}

/**
* 获取对象
* @param dbNumber
* @param key
* @return
*/
public static Object getObject(int dbNumber,String key){
RuntimeSchema<Object> schema = RuntimeSchema.createFrom(Object.class);
try(Jedis jedis = jedisPool.getResource()){
jedis.auth(PASSWORD);
byte[] bs = jedis.get(key.getBytes());
//反序列化
if(bs != null){
Object obj = schema.newMessage();
ProtobufIOUtil.mergeFrom(bs, obj, schema);
return obj;
}
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: