文档章节

Redis学习记录

Sorin_Su
 Sorin_Su
发布于 2016/11/01 17:03
字数 714
阅读 24
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

前言: 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;
    }
}



上一篇: shiro初识
Sorin_Su
粉丝 11
博文 36
码字总数 19571
作品 0
朝阳
程序员
私信 提问
加载中
此博客有 3 条评论,请先登录后再查看。
用vertx实现高吞吐量的站点计数器

工具:vertx,redis,mongodb,log4j 源代码地址:https://github.com/jianglibo/visitrank 先看架构图: 如果你不熟悉vertx,请先google一下。我这里将vertx当作一个容器,上面所有的圆圈要...

jianglibo
2014/04/03
4.2K
3
Nutch学习笔记4-Nutch 1.7 的 索引篇 ElasticSearch

上一篇讲解了爬取和分析的流程,很重要的收获就是: 解析过程中,会根据页面的ContentType获得一系列的注册解析器, 依次调用每个解析器,当其中一个解析成功后就返回,否则继续执行下一个解...

强子哥哥
2014/06/26
712
0
Swing界面分析和调试工具--Swing Inspector

Swing Inspector是一个Java Swing/AWT用户界面分析和调试工具,功能与firebug类似,具有强大的Swing/AWT用户界面分析和调试相关功能。 适用于从java swing初级到高级的所有开发人员,能够快速...

匿名
2013/03/06
3.4K
0
StreetPass

StreetPass,最初是想模拟任天堂NDS掌机中的StreetPass开发的(但未完成,大体框架已可行)。适用于记录每天在街上偶遇的纸妹Or帅锅的信息。 原理是想采用Wifi hot技术,由此可以在搜索到附近...

口米巴
2013/03/18
1.6K
0
PHP框架--XiunoPHP

XiunoPHP 是一款面向高负载应用的 PHP 开发框架,PHPer 通过它可以快速的简单的开发出高负载项目。 XiunoPHP 前身名为 Xiuno Framework,更名后版本号从 v1.0 开始计算。已经经过了多年的实际...

匿名
2013/03/20
2.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在Git历史记录中grep(搜索)已提交的代码 - How to grep (search) committed code in the Git history

问题: I have deleted a file or some code in a file sometime in the past. 我过去某个时候已经删除了文件或文件中的某些代码。 Can I grep in the content (not in the commit messages)......

技术盛宴
28分钟前
9
0
二进制安装安装mysql 8.0.20

MySQL最新版本8.0.20正式发布。与之前8.0的系列版本一样,这次的发行版除了包含缺陷修复,也同样包括新功能。下面快速浏览一下。关键字:hash join、InnoDB双写缓冲、二进制日志事务压缩。 ...

程序员面试吧
32分钟前
18
0
关于python3.8+ pyside2 pyinstaller打包的一些坑

环境: python 3.8 pyinstaller 3.6 pyside2 5.14 打包过程中出现错误(1):   7607 WARNING: lib not found: pywintypes38.dll dependency of c:\users\have_\appdata\local\programs\pyth......

齐勇cn
32分钟前
11
0
备战秋招!静电的UI设计教室全能课程开始招生~系统进阶!提升核心竞争力

。 本文分享自微信公众号 - 静Design(JingDesign91)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

静电1983
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部