redis的簡單使用,以及spring-redis整合

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 還提供了好多接口,在下一篇文章中在做詳細介紹.































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章