redis实战(java项目应用)

       首先,简单介绍下Redis,redis是一个key-value存储系统并提供多种语言的API。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。更详细的介绍可以参照官网(点击打开链接),本文主要介绍redis在工程项目中的具体应用(Redis的java客户端jedis的使用,贴出jedis源码地址:点击打开链接

  下面是具体的步骤:

  1.下载jar包,本文使用的是jedis-2.5.2.jar,下载地址:http://grepcode.com/snapshot/repo1.maven.org/maven2/redis.clients/jedis/2.5.2

现在很多项目使用maven作为项目依赖管理工具,maven只需在pom.xml文件中添加以下依赖即可:

<dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>2.5.2</version>
    </dependency>	
  2.下面即是配置类了,看代码:
<pre name="code" class="java"><span style="font-size:12px;">package com.netease.lwt;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;

import redis.clients.jedis.JedisPoolConfig;

@Configuration
@ComponentScan(basePackages="com.netease.lwt.dao")
public class RedisConfiguration {
	
	public static final String HOST = "e36d254038ee4529.m.cnhza.kvstore.aliyuncs.com";
	public static final Integer PORT = 6379;
	public static final String PASSWORD = "Laowantong2015";


	@Bean
	public RedisConnectionFactory jedisConnectionFactory(){
	   JedisPoolConfig poolConfig = new JedisPoolConfig();	
	   poolConfig.setMaxIdle(8);
	   poolConfig.setMinIdle(0);
	   poolConfig.setTestOnBorrow(true);
	   poolConfig.setTestOnReturn(true);
	   poolConfig.setTestWhileIdle(true);
	   JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(poolConfig);
	   jedisConnectionFactory.setHostName(HOST);
	   jedisConnectionFactory.setPort(PORT);	   
	   jedisConnectionFactory.setPassword(PASSWORD);
	   return jedisConnectionFactory;
	}
	
	@Bean
	public StringRedisTemplate redisTemplate(){
	   StringRedisTemplate redisTemplate = new StringRedisTemplate(jedisConnectionFactory());
	   return redisTemplate;
	}
}
</span>


 

HOST,PORT,PASSWORD分别是服务器地址,端口,连接密码,其他的详细配置可自己根据项目需求动态设置

  3.接下来就是数据结构的定义了,redis支持包括string,list,set,sorted set,hash等结构。本项目中只用到了Set,SortSet,HashSet,若需要使用redis其他数据结构,可另行定义类。
redis各数据结构所提供的方法,可参考: http://redisdoc.com/index.html。

   (1).redis数据集合名定义(set,get操作需要

public class RedisSetName {
	// setName
      public static final String USERGROUPS = "UserGroups";
	public static final String GROUPAUCTIONS = "GroupAuctions";
	public static final String AUCTIONJSONS = "AuctionJsons";
	public static final String AUCTIONGOODS = "AuctionGoods";
	public static final String AUCGOODIMAGES = "AucGoodImages";
	public static final String GROUPINFOS = "GroupInfos";
	public static final String USERAUCTIONISREMIND = "UserAuctionIsRemind";   
	public static final String USERFRIENDREMARK = "UserFriendRemark";   
	public static final String GROUPUSERS = "GroupUsers";  
	public static final String USERINFOS = "UserInfos";
	public static final String RELUSERGROUPINFOS = "RelUserGroupInfos";
	public static final String GROUPUSEREMARK = "GroupUserRemark";

}

    (2)下面就是dao层一些操作定义了。见具体代码:因代码贴出篇幅过大,下面就只给出 sortedset的dao层定义,其他的数据结构操作类似。

     本文定义了redis中sortedset类型数据的增删改查操作,可根据需要添加方法。


package com.netease.lwt.dao;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import javax.inject.Inject;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class RedisSetRepository {
     private StringRedisTemplate redisTemplate;
    @Inject
    public RedisSetRepository(StringRedisTemplate redisTemplate){
       this.redisTemplate = redisTemplate;
    }
    public Long add(String setName, String value) {
       Long num = redisTemplate.opsForSet().add(setName, value);
       return num;
    }
    public Long add(String setName, List<String> values) {
     Long num = new Long(0);
     for(String value : values){ 
       num += redisTemplate.opsForSet().add(setName, value);
      }
    return num;
    } 
    public Long remove(String setName, String value){
     Long num = redisTemplate.opsForSet().remove(setName, value);
     return num;
    } 
    public void removeAll(String setName) {
     redisTemplate.opsForSet().remove(setName, redisTemplate.opsForSet().members(setName));
    } 
    public List<String> getAll(String setName){
     setMembers = redisTemplate.opsForSet().members(setName);
     return new ArrayList<String>(setMembers);
    }
    
}
   (3)接下来就可以在自己的Service层定义自己的方法了,比如你把用户信息缓存了,那在 Service中需要获取用户信息的时候就可以通过上数dao层定义的方法上获取了。下面贴出本项目中一个使用实例

	/************************************** Redis相关增加/修改/删除操作 **************************************************************/
	@Override
	public void save(Group group) {
		groupRepository.save(group);
		redisHashSetRepository.set(
				RedisSetName.generateSetName(RedisSetName.GROUPINFOS,
						group.getIm()), "name", group.getName());
	}

	public void deleteGroup(Group group) {
		groupRepository.deleteByIm(group.getIm());
		redisHashSetRepository.remove(
				RedisSetName.generateSetName(RedisSetName.GROUPINFOS,
						group.getIm()), "name");
	}
 
/*************************************** Redis相关查询操作**************************************************************/ 

@Override
public List<String> findGroupImsByUser(String uid) throws CustomException {

return ims = redisSetRepository.getAll(RedisSetName.generateSetName(RedisSetName.USERGROUPS, uid));

}











  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值