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>
<property name="connectionFactory" ref="connectionFactory" />
</bean>
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;
}
/**
* 新增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);
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
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
*/
public User getById(User key) {
return (User) redisTemplate.opsForHash().get(key.getOBJECT(), key.getKeyById());
}
/**
*刪除第一個參數實體類的key
*第二個參數具體實例的key
*刪除的時候傳入要刪除的對象redisTemplate根據key.getObjectKey()找到要刪除的值(多個)
*然後根據 key.getId()找到要刪除的具體實例
* @param user
*/
public void delById(User key) {
redisTemplate.opsForHash().delete(key.getOBJECT(), key.getKeyById());
}
public void putManyById(String OBJECTKEY,Map<String, User> map) {
redisTemplate.opsForHash().putAll(OBJECTKEY, map);
}
import java.util.Map;
import org.springframework.context.support.ClassPathXmlApplicationContext;
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));
}
}
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]