redis的简单使用,以及spring-redis整合

来源:互联网 发布:海报字体软件 编辑:程序博客网 时间:2024/06/15 21:08

redis 简介:

Redis支持数据的持久化(跟关系型数据库作用相同,所以redis可以当做数据库来使用),可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的key-value类型的数据,同时还提供list(列表)set(集合)sorted set(有序集合)hash(哈希用来存贮对象)等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。


redis优势:

性能极高  Redis能读的速度是110000/s,写的速度是81000/s

丰富的数据类型 Redis支持二进制案例的 Strings, Lists, Hashes, Sets Ordered Sets数据类型操作。

原子(事务) Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

丰富的特性  Redis还支持 publish/subscribe,通知, key过期等等特性


redis使用场景:

redis适用于select 语句查询,而且存放的数据是频繁,大批量的访问的数据。

请求过来,redis里面有没有?有就给用户

没有查询数据库

数据库里面有没有?没有告诉用户没有

有就查询出来,给用户,并且存放到redis


spring-redis整合:

新增的jar包:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-redis</artifactId>
    <version>1.4.2.RELEASE</version>
</dependency>

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.7.2</version>
</dependency>



<!-- 配置连接池 -->
  <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
  <property name="maxIdle" value="100" />
  <property name="maxTotal" value="15" />
  <property name="maxWaitMillis" value="10000" />
  <property name="testOnBorrow" value="true" />
 </bean>
 <!-- 连接服务器参数 -->
 <bean id="connectionFactory"
  class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
  <property name="hostName" value="127.0.0.1" />
  <property name="password" value="" />
  <property name="port" value="6379" />
  <property name="poolConfig" ref="jedisPoolConfig" />
 </bean>
 <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
  <property name="connectionFactory" ref="connectionFactory" />
 </bean>


用户表:
import java.io.Serializable;
public class User implements Serializable {

 private static final long serialVersionUID = -4135517288939641518L;
 private static final String OBJECT_KEY = "USER";
 
 private String id;
 private String username;
 private String password;
 public User(String id, String username, String password) {
  this.id = id;
  this.username = username;
  this.password = password;
 }
 /**
  * 无参构造方法
  */
 public User() {
 }
 /**
  * 获取id
  * @return
  */
 public String getId() {
  return id;
 }
 /**
  * 设置id
  * @return
  */
 public void setId(String id) {
  this.id = id;
 }
 /**
  * 获取username
  * @return
  */
 public String getUsername() {
  return username;
 }
 /**
  * 设置username
  * @return
  */
 public void setUsername(String username) {
  this.username = username;
 }
 /**
  * 获取password
  * @return
  */
 public String getPassword() {
  return password;
 }
 /**
  * 设置password
  * @return
  */
 public void setPassword(String password) {
  this.password = password;
 }
 @Override
 public String toString() {
  return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
 }
 /**
  * 通过id获取具体实例
  * @return
  */
 public String getKeyById() {
  return getId();
 }
 /**
  * 根据Object获取 具体存入的hash表
  * @return
  */
 public String getOBJECT() {
  return OBJECT_KEY;
 }


RedisDao;

package com.redis.service;
import java.util.Map;
import com.redis.model.User;
public interface RedisDao {
 /**
  * 新增ById
  */
 public void putById(User user);
 /**
  * 批量增加
  * @param user
  */
 public void putManyById(String OBJECTKEY,Map<String, User> map);
 
 /**
  * 删除ById
  */
 public void delById(User key);

 /**
  * 获取ById
  */
 public User getById(User key);

}

RedisImpl

import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import com.redis.model.User;
import com.redis.service.RedisDao;
@Service
public class RedisDaompl implements RedisDao{
 /**
  * 注入RedisTemplate
  */
 @Autowired
 private RedisTemplate<String,User> redisTemplate;

/**

         *添加第一个参数为实体类的 key(唯一) (本实体类所有的对象,都放在这个键里面)

         *第二个参数为实体类某个具体实例的key

         *第三个参数为要加入的对象

         * @param user

         */
 @Override
 public void putById(User user) {
  redisTemplate.opsForHash().put(user.getOBJECT(),user.getKeyById(), user);
 }

/**

         *获取第一个参数为实体类的 key(唯一) 

         *第二个参数为某个具体实例的key

         * get 1.先根据key.getOBJECT()获取整个hash 2.根据key.getKey获取某个具体实例

         *

         * @param user

         */

@Override
 public User getById(User key) {
  return (User) redisTemplate.opsForHash().get(key.getOBJECT(), key.getKeyById());
 }

/**

         *删除第一个参数实体类的key

         *第二个参数具体实例的key

         *删除的时候传入要删除的对象redisTemplate根据key.getObjectKey()找到要删除的(多个)

         *然后根据 key.getId()找到要删除的具体实例

         * @param user

         */


@Override
 public void delById(User key) {
  redisTemplate.opsForHash().delete(key.getOBJECT(), key.getKeyById());
 }

/**
      *批量添加
      */
@Override
 public void putManyById(String OBJECTKEY,Map<String, User> map) {
  redisTemplate.opsForHash().putAll(OBJECTKEY, map);
 }
}
  
 
 
测试:
import java.util.HashMap;
import java.util.Map;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.redis.model.User;
public class test {
 public static void main(String[] args) {
  ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
  RedisDaompl dao = app.getBean(RedisDaompl.class);
  User user1 = new User("1","张三","123456");
  User user2 = new User("2","李四","654321");
  User user3 = new User("3","王五","456789");
  User user4 = new User("4","麻六","987654");
  
  // 添加
  dao.putById(user1);
  dao.putById(user2);
  //批量增加
  Map<String,User> map = new HashMap<String,User>();
  map.put(user3.getId(), user3);
  map.put(user4.getId(), user4);
  dao.putManyById(user3.getOBJECT(), map);
  
  //获取
  System.out.println("user1"+dao.getById(user1));
  System.out.println("user2"+dao.getById(user2));
  System.out.println("user3"+dao.getById(user3));
  System.out.println("user4"+dao.getById(user4));
  
  // 删除user1 和user2
  dao.delById(user1);
  dao.delById(user2);
  
  // 再次获取
  System.out.println("user1"+dao.getById(user1));
  System.out.println("user2"+dao.getById(user2));
  System.out.println("user3"+dao.getById(user3));
  System.out.println("user4"+dao.getById(user4));
  
 }
}

结果:
user1=User [id=1, username=张三, password=123456]
user2=User [id=2, username=李四, password=654321]
user3=User [id=3, username=王五, password=456789]
user4=User [id=4, username=麻六, password=987654]
user1=null
user2=null
user3=User [id=3, username=王五, password=456789]
user4=User [id=4, username=麻六, password=987654]

本篇值讲解了redisTemplate中的hash数据的存放,其中:RedisTemplate 还提供了好多接口,在下一篇文章中在做详细介绍.































原创粉丝点击