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

redis单机版安装+测试+项目运用

2017-02-09 15:14 429 查看

【简介】

    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
    应用场景:前台有一部分内容经常被大量多次的访问的情况下就有必要使用redis了
    优点:减少了对数据的访问,使得对用户的相应请求更加迅速

【安装步骤】

    第一步:安装gcc编译环境

      命令:yum install gcc-c++

    第二步:将redis的源码上传到linux服务器中

      可以直接在百度中搜索redis-3.0.0.tar.gz

    第三步:解压缩

      tar -zxvf redis-3.0.0.tar.gz

    第四步:进入解压后的redis文件夹中,输入命令:make

    第五步:安装输入命令: make install PREFIX=/usr/local/redis/

      注:/usr/local/redis/为安装的redis的位置,最后的/不可省略

【启动redis】

    前端启动:进入redis安装目录,输入命令:./redis-server

      这样的形式不利于操作,一般采用后台启动

    后台启动:

      1.将安装步骤中的第三步,解压缩的文件夹中的redis.conf复制到redis的安装目录

      2.修改redis.conf内容中的daemonize no   为daemonize yes

      3.输入命令启动:./redis-server redis.conf

      注:后台启动之后可以输入ps aux|grep redis  查看进程是否启动,这样配置默认的ip为localhost(127.0.0.1)  默认的端口号为 6379 ;如下图所示为启动成功



【测试redis】

    dos命令测试

      1.进入redis安装目录

      2.输入命令:./redis-cli -p 6379 -h 192.168.37.10 -c(最后的-c是一定要有的)

      通过set设置值,get获取值进行测试,如下图所示



    项目中测试(通过jedis进行测试)

      1.引入jedis依赖的jar包: jedis-2.7.2.jar

      2.编写测试方法,如下代码
-
package com.taotao.jedis;

import org.junit.Test;

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

public class JedisTest {

//单机版
@Test
public void testJedisSingle() throws Exception{
//创建一个jedis对象
Jedis jedis = new Jedis("192.168.37.10",6379);
jedis.set("test", "hello jedis");
String string = jedis.get("test");
System.out.println(string);
jedis.close();
}

//使用连接池
@Test
public void testJedisPool() throws Exception{
//创建一个链接池对象
//系统中应该是单例的
JedisPool jedisPool = new JedisPool("192.168.37.10",6379);
//从连接池中获得一个连接
Jedis jedis = jedisPool.getResource();
String result = jedis.get("test");
System.out.println(result);
//jedis必须关闭
jedis.close();

//系统关闭时关闭连接池
jedisPool.close();
}

}
-

【项目运用】

    思路:创建一个jedis操作的接口,创建一个实体类来实现redis的接口

    jedis的接口类

-
package com.taotao.rest.component;

public interface JedisClient {

public String set(String key,String value);
public String get(String key);
public Long hset(String key,String item,String value);
public String hget(String key,String item);
public Long incr(String key);
public Long decr(String key);
public Long expire(String key,int second);
public Long ttl(String key);
public Long hdel(String key,String item);
}
-
    

    jedis的实现类

-
package com.taotao.rest.component.impl;

import org.springframework.beans.factory.annotation.Autowired;

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

import com.taotao.rest.component.JedisClient;

/**
* redis客户端单机版实现类
* @author	mk
* @date	2017年2月8日下午9:34:39
* @version 1.0
*/
public class JedisClientSingle implements JedisClient {

@Autowired
private JedisPool jedisPool;

@Override
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String result = jedis.set(key, value);
jedis.close();
return result;
}

@Override
public String get(String key) {
Jedis jedis = jedisPool.getResource();
String result = jedis.get(key);
jedis.close();
return result;
}

@Override
public Long hset(String key, String item, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(key,item, value);
jedis.close();
return result;
}

@Override
public String hget(String key, String item) {
Jedis jedis = jedisPool.getResource();
String result = jedis.hget(key, item);
jedis.close();
return result;
}

@Override
public Long incr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.incr(key);
jedis.close();
return result;
}

@Override
public Long decr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.decr(key);
jedis.close();
return result;
}

@Override
public Long expire(String key, int second) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.expire(key,second);
jedis.close();
return result;
}

@Override
public Long ttl(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.ttl(key);
jedis.close();
return result;
}

@Override
public Long hdel(String key, String item) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hdel(key,item);
jedis.close();
return result;
}

}
-


    

    spring配置

-
<!-- 配置redis客户端单机版 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool" >
<constructor-arg name="host" value="192.168.37.10"></constructor-arg>
<constructor-arg name="port" value="6379"></constructor-arg>
</bean>
<!-- 配置redis客户端实现类 -->
<bean id="jedisClientSingle" class="com.taotao.rest.component.impl.JedisClientSingle"/>
-
    

    service中的运用(REDIS_CONTENT_KEY为固定的一个规范,在配置文件中自己设定就可以了)

-
@Override
public List<TbContent> getContentList(Long cid) {
//添加缓存
//查询数据库之前先查询缓存,如果有直接返回
try {
//从redis中取缓存数据
String json = jedisClient.hget(REDIS_CONTENT_KEY, cid+"");
if (!StringUtils.isBlank(json)) {
//把json转换成list
List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class);
return list;
}
} catch (Exception e) {
e.printStackTrace();
}

//根据cid查询内容列表
TbContentExample example = new TbContentExample();
Criteria criteria = example.createCriteria();
criteria.andCategoryIdEqualTo(cid);
//执行查询
List<TbContent> list = contentMapper.selectByExample(example);

//返回结果之前,向缓存中添加数据
try {
//为了规范key可以使用hash
//定义一个保存内容的key,hash中每个项就是cid
//value是list,需要把list转换成jeson数据

jedisClient.hset(REDIS_CONTENT_KEY, cid+"", JsonUtils.objectToJson(list));
} catch (Exception e) {
e.printStackTrace();
}

return list;
}
-


【总结】

    通过对redis环境的配置测试以及项目中的运用,让我深刻的感受到了缓存的力量,以及通过这几技术点开拓的自己的思想,以及考虑问题的角度。

    针对于每一个技术点都应该有它独特的适应场景,而不是随意去用,如果是为了学习测试某一个技术点那么在任何地方进行都是可以的,如果是项目中来运用的话还是要深刻的思考宏观的把控,来衡量一下这个技术点的运用场景从而来裁决是否用它。

    有时候小编也会思考,如何才能够让自己学习一个东西来达到举一反三的效果,实践证明小编的理论就是:首先有一套可执行的理论;其次就是自己要不断去尝试,一定要亲自动手去做;最后如果在做的过程中遇到各种各样的问题之后要是再加上:“我又遇到问题了,我又能够成长了,我又能够从更多的角度用更多的思路来理解这个知识点了”,这样的心态的话,那么学习走想成功也就不太远啦O(∩_∩)O~

    总结沉潜,继续前行啦O(∩_∩)O~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java redis 总结