Redis是一個開源,先進的key-value存儲,並用於構建高性能,可擴展的Web應用程序的完美解決方案。java
Redis從它的許多競爭繼承來的三個主要特色:redis
Redis數據庫徹底在內存中,使用磁盤僅用於持久性。spring
相比許多鍵值數據存儲,Redis擁有一套較爲豐富的數據類型。數據庫
Redis能夠將數據複製到任意數量的從服務器。apache
Redis 優點以下:緩存
異常快速:Redis的速度很是快,每秒能執行約11萬集合,每秒約81000+條記錄。服務器
支持豐富的數據類型:Redis支持最大多數開發人員已經知道像列表,集合,有序集合,散列數據類型。這使得它很是容易解決各類各樣的問題,由於咱們知道哪些問題是能夠處理經過它的數據類型更好。工具
操做都是原子性:全部Redis操做是原子的,這保證了若是兩個客戶端同時訪問的Redis服務器將得到更新後的值。性能
多功能實用工具:Redis是一個多實用的工具,能夠在多個用例如緩存,消息,隊列使用(Redis原生支持發佈/訂閱),任何短暫的數據,應用程序,如Web應用程序會話,網頁命中計數等。url
spring-data-redis 封裝 RedisService 操做封裝源碼以下:
package com.yoodb.service; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.annotation.Resource; import org.apache.shiro.dao.DataAccessException; import org.springframework.data.redis.connection.DataType; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisListCommands.Position; import org.springframework.data.redis.connection.RedisZSetCommands.Tuple; import org.springframework.data.redis.connection.SortParameters; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.stereotype.Service; /** * @author yoodb * @出自 素文宅 * @url www.yoodb.com * @注意 轉載請註明www.yoodb.com * @param <K> * @param <V> */ @Service public class CopyOfRedisService<K, V> { @Resource(name = "redisTemplate") protected RedisTemplate<K, V> redisTemplate; /** * 設置key */ public Boolean set(final String key, final String value) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); byte[] values = serializer.serialize(value); connection.set(keys, values); return true; } }); } return false; } /** * 根據key獲取對象 */ public String get(final String key) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<String>() { public String doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); byte[] values = connection.get(keys); if (values == null) { return null; } String value = serializer.deserialize(values); return value; } }); } return null; } /** * 根據key刪除 * @param key * @return */ public Long del(final String key) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<Long>() { public Long doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); return connection.del(keys); } }); } return null; } /** * 某段時間後執行 * @param key * @param value * @return */ public Boolean expire(final String key, final long value) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); return connection.expire(keys, value); } }); } return false; } /** * 在某個時間點失效 * @param key * @param value * @return */ public Boolean expireAt(final String key, final long value) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); return connection.expireAt(keys, value); } }); } return false; } /** * 查詢剩餘時間 * @param key * @param value * @return */ public Long ttl(final String key, final long value) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<Long>() { public Long doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); return connection.ttl(keys); } }); } return 0l; } /** * 判斷key是否存在 * @param key * @return */ public Boolean exists(final String key) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); return connection.exists(keys); } }); } return false; } /** * 返回 key 所儲存的值的類型 * @param key * @return */ public DataType type(final String key) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<DataType>() { public DataType doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); return connection.type(keys); } }); } return null; } /** * 對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit) * @param key * @param offset * @param value * @return */ public Boolean setBit(final String key,final long offset,final boolean value) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); connection.setBit(keys,offset,value); return true; } }); } return false; } /** * 對 key 所儲存的字符串值,獲取指定偏移量上的位(bit) * @param key * @param value * @return */ public Boolean getBit(final String key ,final long value) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); return connection.getBit(keys, value); } }); } return false; } /** * 用 value 參數覆寫(overwrite)給定 key 所儲存的字符串值,從偏移量 offset 開始 * @param key * @param offset * @param value * @return */ public Boolean setRange(final String key,final Long offset,final String value) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<Boolean>() { public Boolean doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); byte[] values = serializer.serialize(value); connection.setRange(keys,values,offset); return true; } }); } return false; } /** * 返回 key 中字符串值的子字符串,字符串的截取範圍由 start 和 end 兩個偏移量決定 * @param key * @param startOffset * @param endOffset * @return */ public byte[] getRange(final String key,final long startOffset,final long endOffset) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<byte[]>() { public byte[] doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); return connection.getRange(keys,startOffset,endOffset); } }); } return null; } /** * 刪除對象 ,依賴key */ public void delete(String key) { List<String> list = new ArrayList<String>(); list.add(key); delete(list); } /** * 刪除集合 ,依賴key集合 */ @SuppressWarnings("unchecked") private void delete(List<String> keys) { redisTemplate.delete((K) keys); } /** * 根據參數 count 的值,移除列表中與參數 value 相等的元素 * @param keyStr * @param count * @param valueStr * @return */ public Long lrem(final String key, final long count, final String value) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<Long>() { public Long doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); byte[] values = serializer.serialize(value); return connection.lRem(keys, count, values); } }); } return null; } /** * 將一個或多個值 value 插入到列表 key 的表頭 * @param keyStr * @param valueStr * @return */ public Long lpush(final String key, final String value) { if (redisTemplate != null) { redisTemplate.execute(new RedisCallback<Long>() { public Long doInRedis(RedisConnection connection) throws DataAccessException { RedisSerializer<String> serializer = getRedisSerializer(); byte[] keys = serializer.serialize(key); byte[] values = serializer.serialize(value); return connection.lPush(keys, values); } }); } return null; } .....內容沒法所有粘貼過來不全...... 注意 所有源碼地址 http://blog.yoodb.com/yoodb/article/detail/1065