Redisはspringboot構成と組み合わせて、redisは非同期(メッセージキューのような)操作を実現します.(学習ノート)
108655 ワード
Redisはオープンソース(BSDライセンス)で、メモリに格納されたデータ構造サーバであり、データベース、キャッシュ、メッセージキューエージェントとして使用できます.文字列、ハッシュテーブル、リスト、集合、秩序集合、ビットマップ、hyperlogsなどのデータ型をサポートします.レプリケーション、luaスクリプト、LRUリサイクリング、さまざまなレベルのディスク持続化機能を内蔵し、Redis Centinelで高可用性を提供し、Redis Clusterで自動パーティションを提供します.
Redisのメリットの性能は極めて高い:Redisの読み取り速度は11万回毎秒、書き込み速度は8.1万回毎秒である. 豊富なデータ型:RedisはバイナリケースのStrings,Lists,Hashes,SetsおよびOrdered Setsデータ型操作をサポートする. 原子:Redisのすべての操作は原子的であり、同時にRedisはいくつかの操作の完全な並列後の原子的実行をサポートする. 豊富な機能:Redisはpublish/subscribe、通知、keyの期限切れなどの機能もサポートしています.
Redisコマンド(ローカルまたはリモートに接続)
redisクライアントを起動し、端末を開き、コマンドredis-cliを入力します.このコマンドは、ローカルのredisサービスに接続されます.
リモート・サービスでのコマンドの実行
Redisキー
DELはコマンドで、w 3 ckeyはキーです.キーの削除に成功した場合、コマンド実行後に1を出力します.そうしないと0を出力します.
Redisキー
シーケンス番号
コマンドと説明
1
DEL keyこのコマンドは、keyが存在する場合にkeyを削除するために使用されます.
2
DUMP keyは、所与のkeyをシーケンス化し、シーケンス化された値を返す.
3
EXISTSキーは、所与のキーが存在するかどうかをチェックします.
4
EXPIRE key secondsは、所与のkeyの有効期限を設定します.
5
EXPIREAT key timestamp EXPIREATの役割はEXPIREと同様で、keyの有効期限を設定するために使用されます.異なる点は、EXPIREATコマンドが受け入れる時間パラメータがUNIXタイムスタンプ(unix timestamp)であることである.
6
PEXPIRE key milliseconds設定keyの有効期限はミリ秒で1億ドルです.
7
PEXPIREAT key milliseconds-timestampキーの有効期限をミリ秒単位で設定
8
KEYS patternは、所与のモード(pattern)に適合するすべてのkeyを検索する.
9
MOVE key dbは、現在のデータベースのkeyを所定のデータベースdbに移動する.
10
PERSIST keyはkeyの期限切れを除去し、keyは持続的に維持されます.
11
PTTL keyは、keyの残りの有効期限をミリ秒単位で返します.
12
TTL keyは秒単位で所与のkeyの残存生存時間(TTL,time to live)を返す.
13
RANDOMKEYは、現在のデータベースからランダムにキーを返します.
14
RENAME key newkey修正keyの名前
15
RENAMENX key newkeyは、newkeyが存在しない場合にのみ、keyをnewkeyと改名する.
16
TYPE keyは、keyが格納した値のタイプを返します.
その他:公式サイトhttp://www.redis.net.cn/tutorial/3509.html
义齿 Maven依存
2.プロファイルyml
3.redisのプロファイルは后のコードの中で、1つのredisのツールクラスを书いて、ここでプロジェクトの中のコードを摘用してソースコードを通じて知ることができて、SpringBootは自动的に私达に容器の中で1つのRedisTemplateと1つのStringRedisTemplateを生成しました.このRedisServiceはSpringコンテナにインスタンス化され,使用時に直接注記注入される.
redisの非同期(類似メッセージキュー)使用受信メッセージクラスインジェクションReceiveMessageを作成し、redisツールクラスを作成する上に がある. redis構成クラス redisキューはここで使用するときに伝達された値をシーケンス化操作を行い、受信時に逆シーケンス化を行い、公開時にjsonを使用することを推奨しますここでは完全なコードを貼らない
Redisのメリット
Redisコマンド(ローカルまたはリモートに接続)
redisクライアントを起動し、端末を開き、コマンドredis-cliを入力します.このコマンドは、ローカルのredisサービスに接続されます.
$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
リモート・サービスでのコマンドの実行
$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING
Redisキー
DELはコマンドで、w 3 ckeyはキーです.キーの削除に成功した場合、コマンド実行後に1を出力します.そうしないと0を出力します.
redis 127.0.0.1:6379> SET w3ckey redis
OK
redis 127.0.0.1:6379> DEL w3ckey
(integer) 1
Redisキー
シーケンス番号
コマンドと説明
1
DEL keyこのコマンドは、keyが存在する場合にkeyを削除するために使用されます.
2
DUMP keyは、所与のkeyをシーケンス化し、シーケンス化された値を返す.
3
EXISTSキーは、所与のキーが存在するかどうかをチェックします.
4
EXPIRE key secondsは、所与のkeyの有効期限を設定します.
5
EXPIREAT key timestamp EXPIREATの役割はEXPIREと同様で、keyの有効期限を設定するために使用されます.異なる点は、EXPIREATコマンドが受け入れる時間パラメータがUNIXタイムスタンプ(unix timestamp)であることである.
6
PEXPIRE key milliseconds設定keyの有効期限はミリ秒で1億ドルです.
7
PEXPIREAT key milliseconds-timestampキーの有効期限をミリ秒単位で設定
8
KEYS patternは、所与のモード(pattern)に適合するすべてのkeyを検索する.
9
MOVE key dbは、現在のデータベースのkeyを所定のデータベースdbに移動する.
10
PERSIST keyはkeyの期限切れを除去し、keyは持続的に維持されます.
11
PTTL keyは、keyの残りの有効期限をミリ秒単位で返します.
12
TTL keyは秒単位で所与のkeyの残存生存時間(TTL,time to live)を返す.
13
RANDOMKEYは、現在のデータベースからランダムにキーを返します.
14
RENAME key newkey修正keyの名前
15
RENAMENX key newkeyは、newkeyが存在しない場合にのみ、keyをnewkeyと改名する.
16
TYPE keyは、keyが格納した値のタイプを返します.
その他:公式サイトhttp://www.redis.net.cn/tutorial/3509.html
义齿
org.springframework.boot
spring-boot-starter-data-redis
redis.clients
jedis
io.lettuce
lettuce-core
redis.clients
jedis
2.9.0
2.プロファイルyml
## redis
redis:
database: 0
host: 127.0.0.1
password: jijl
port: 6380
timeout: 6000ms # ( )
jedis:
pool:
max-active: 1000 # ( )
max-wait: -1ms # ( )
max-idle: 10 #
min-idle: 5 #
3.redisのプロファイルは后のコードの中で、1つのredisのツールクラスを书いて、ここでプロジェクトの中のコードを摘用してソースコードを通じて知ることができて、SpringBootは自动的に私达に容器の中で1つのRedisTemplateと1つのStringRedisTemplateを生成しました.このRedisServiceはSpringコンテナにインスタンス化され,使用時に直接注記注入される.
package com.laiganhlj.dlc.common.redis;
import com.laiganhlj.dlc.common.result.SysConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisConnectionUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* @Author: jijl
* @Description: redis
* @Date: 2018/7/2 16:53
**/
@Slf4j
@Component
public class RedisService {
@Autowired
private RedisTemplate redisTemplate;
public void redisColse() {
RedisConnectionUtils.unbindConnection(redisTemplate.getConnectionFactory());
}
//=============================common============================
/**
*
*
* @param key
* @param time ( )
* @return
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* key
*
* @param key null
* @return ( ) 0
*/
public long getExpire(String key) {
long timeOut = redisTemplate.getExpire(key, TimeUnit.SECONDS);
redisColse();
return timeOut;
}
/**
* key
*
* @param key
* @return true false
*/
public boolean hasKey(String key) {
boolean flag = false;
try {
flag = redisTemplate.hasKey(key);
} catch (Exception e) {
e.printStackTrace();
flag = false;
} finally {
redisColse();
return flag;
}
}
/**
*
*
* @param key
*/
@SuppressWarnings("unchecked")
public void del(String... key) {
if (key != null && key.length > 0) {
if (key.length == 1) {
redisTemplate.delete(key[0]);
} else {
redisTemplate.delete(CollectionUtils.arrayToList(key));
}
}
redisColse();
}
//============================String=============================
/**
*
*
* @param key
* @return
*/
public Object get(String key) {
Object o = redisTemplate.opsForValue().get(key);
redisColse();
return o;
}
/**
*
*
* @param key
* @param value
* @return true false
*/
public boolean set(String key, Object value) {
boolean flag = false;
try {
redisTemplate.opsForValue().set(key, value);
flag = true;
} catch (Exception e) {
e.printStackTrace();
flag = false;
} finally {
redisColse();
return flag;
}
}
/**
*
*
* @param key
* @param value
* @param time ( ) time 0 time 0
* @return true false
*/
public boolean set(String key, Object value, long time) {
boolean flag = false;
try {
if (time > 0) {
redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
} else {
set(key, value);
}
flag = true;
} catch (Exception e) {
e.printStackTrace();
flag = false;
} finally {
redisColse();
return flag;
}
}
/**
*
*
* @param key
* @param delta ( 0)
* @return
*/
public long incr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException(" 0");
}
long timeOut = redisTemplate.opsForValue().increment(key, delta);
redisColse();
return timeOut;
}
/**
*
*
* @param key
* @param delta ( 0)
* @return
*/
public long decr(String key, long delta) {
if (delta < 0) {
throw new RuntimeException(" 0");
}
long timeOut = redisTemplate.opsForValue().increment(key, -delta);
return timeOut;
}
//================================Map=================================
/**
* HashGet
*
* @param key null
* @param item null
* @return
*/
public Object hget(String key, String item) {
Object o = redisTemplate.opsForHash().get(key, item);
redisColse();
return o;
}
/**
* hashKey
*
* @param key
* @return
*/
public Map<Object, Object> hmget(String key) {
Map<Object, Object> map = redisTemplate.opsForHash().entries(key);
redisColse();
return map;
}
/**
* HashSet
*
* @param key
* @param map
* @return true false
*/
public boolean hmset(String key, Map<String, Object> map) {
boolean flag = false;
try {
redisTemplate.opsForHash().putAll(key, map);
flag = true;
} catch (Exception e) {
e.printStackTrace();
flag = false;
} finally {
redisColse();
return flag;
}
}
/**
* HashSet
*
* @param key
* @param map
* @param time ( )
* @return true false
*/
public boolean hmset(String key, Map<String, Object> map, long time) {
boolean flag = false;
try {
redisTemplate.opsForHash().putAll(key, map);
if (time > 0) {
expire(key, time);
}
flag = true;
} catch (Exception e) {
e.printStackTrace();
flag = false;
} finally {
redisColse();
return flag;
}
}
/**
* hash ,
*
* @param key
* @param item
* @param value
* @return true false
*/
public boolean hset(String key, String item, Object value) {
boolean flag = false;
try {
redisTemplate.opsForHash().put(key, item, value);
flag = true;
} catch (Exception e) {
e.printStackTrace();
flag = false;
} finally {
redisColse();
return flag;
}
}
/**
* hash ,
*
* @param key
* @param item
* @param value
* @param time ( ) : hash ,
* @return true false
*/
public boolean hset(String key, String item, Object value, long time) {
boolean flag = false;
try {
redisTemplate.opsForHash().put(key, item, value);
if (time > 0) {
expire(key, time);
}
flag = true;
} catch (Exception e) {
e.printStackTrace();
flag = false;
} finally {
redisColse();
return flag;
}
}
/**
* hash
*
* @param key null
* @param item null
*/
public void hdel(String key, Object... item) {
redisTemplate.opsForHash().delete(key, item);
redisColse();
}
/**
* hash
*
* @param key null
* @param item null
* @return true false
*/
public boolean hHasKey(String key, String item) {
boolean flag = redisTemplate.opsForHash().hasKey(key, item);
redisColse();
return flag;
}
/**
* hash ,
*
* @param key
* @param item
* @param by ( 0)
* @return
*/
public double hincr(String key, String item, double by) {
double num = redisTemplate.opsForHash().increment(key, item, by);
redisColse();
return num;
}
/**
* hash
*
* @param key
* @param item
* @param by ( 0)
* @return
*/
public double hdecr(String key, String item, double by) {
double num = redisTemplate.opsForHash().increment(key, item, -by);
redisColse();
return num;
}
//============================set=============================
/**
* key Set
*
* @param key
* @return
*/
public Set<Object> sGet(String key) {
try {
Set<Object> set = redisTemplate.opsForSet().members(key);
return set;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
redisColse();
}
}
/**
* value set ,
*
* @param key
* @param value
* @return true false
*/
public boolean sHasKey(String key, Object value) {
boolean flag = false;
try {
flag = redisTemplate.opsForSet().isMember(key, value);
return flag;
} catch (Exception e) {
e.printStackTrace();
flag = false;
} finally {
redisColse();
return flag;
}
}
/**
* set
*
* @param key
* @param values
* @return
*/
public long sSet(String key, Object... values) {
try {
long num = redisTemplate.opsForSet().add(key, values);
return num;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
redisColse();
}
}
/**
* set
*
* @param key
* @param time ( )
* @param values
* @return
*/
public long sSetAndTime(String key, long time, Object... values) {
try {
Long count = redisTemplate.opsForSet().add(key, values);
if (time > 0) expire(key, time);
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
redisColse();
}
}
/**
* set
*
* @param key
* @return
*/
public long sGetSetSize(String key) {
try {
long num = redisTemplate.opsForSet().size(key);
return num;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
redisColse();
}
}
/**
* value
*
* @param key
* @param values
* @return
*/
public long setRemove(String key, Object... values) {
try {
Long count = redisTemplate.opsForSet().remove(key, values);
return count;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
redisColse();
}
}
//===============================list=================================
/**
* list
*
* @param key
* @param start
* @param end 0 -1
* @return
*/
public List<Object> lGet(String key, long start, long end) {
try {
List<Object> list = redisTemplate.opsForList().range(key, start, end);
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
redisColse();
}
}
/**
* list
*
* @param key
* @return
*/
public long lGetListSize(String key) {
try {
long num = redisTemplate.opsForList().size(key);
return num;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
redisColse();
}
}
/**
* list
*
* @param key
* @param index index>=0 , 0 ,1 , ;index<0 ,-1, ,-2 ,
* @return
*/
public Object lGetIndex(String key, long index) {
try {
Object o = redisTemplate.opsForList().index(key, index);
return o;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
redisColse();
}
}
/**
* list
*
* @param key
* @param value
* @return
*/
public boolean lSet(String key, Object value) {
try {
redisTemplate.opsForList().rightPush(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
redisColse();
}
}
/**
* list
*
* @param key
* @param value
* @param time ( )
* @return
*/
public boolean lSet(String key, Object value, long time) {
try {
redisTemplate.opsForList().rightPush(key, value);
if (time > 0) expire(key, time);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
redisColse();
}
}
/**
* list
*
* @param key
* @param value
* @return
*/
public boolean lSet(String key, List<Object> value) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
redisColse();
}
}
/**
* list
*
* @param key
* @param value
* @param time ( )
* @return
*/
public boolean lSet(String key, List<Object> value, long time) {
try {
redisTemplate.opsForList().rightPushAll(key, value);
if (time > 0) expire(key, time);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
redisColse();
}
}
/**
* list
*
* @param key
* @param index
* @param value
* @return
*/
public boolean lUpdateIndex(String key, long index, Object value) {
try {
redisTemplate.opsForList().set(key, index, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
redisColse();
}
}
/**
* N value
*
* @param key
* @param count
* @param value
* @return
*/
public long lRemove(String key, long count, Object value) {
try {
Long remove = redisTemplate.opsForList().remove(key, count, value);
return remove;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
redisColse();
}
}
//=============================== =================================
/**
*
*
* @param channel
* @param message
*/
public void sendMessage(String channel, Serializable message) {
redisTemplate.convertAndSend(channel, message);
}
/**
*
*
* @param uniqueId
* @return
*/
public Object getAuthorizedSubject(String uniqueId) {
return get(SysConstant.PROJECT_NAME + uniqueId);
}
/**
*
*
* @param uniqueId
*/
public void delAuthorizedSubject(String uniqueId) {
del(SysConstant.PROJECT_NAME + uniqueId);
}
/**
*
*
* @param uniqueId
* @param obj
* @param time
* @return
*/
public boolean setAuthorizedSubject(String uniqueId, Object obj, long time) {
return set(SysConstant.PROJECT_NAME + uniqueId, obj, time);
}
}
redisの非同期(類似メッセージキュー)使用
package com.laiganhlj.dlc.common.redis;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.Serializable;
import java.util.concurrent.CountDownLatch;
/**
*
*/
@Slf4j
public class ReceiveMessage {
private CountDownLatch latch;
@Autowired
public ReceiveMessage(CountDownLatch countDownLatch) {
this.latch = countDownLatch;
}
public void receiveMessage(Serializable message) {
log.info("message :{}", message);
}
public void receiveMessage2(Serializable message) {
log.info("message2 :{}", message);
}
}
package com.laiganhlj.dlc.config;
import com.laiganhlj.dlc.common.redis.ReceiveMessage;
import com.laiganhlj.dlc.common.result.SysConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.io.Serializable;
import java.util.concurrent.CountDownLatch;
/**
* @Author: jijl
* @Description: redis
* @Date: 2018/6/27 15:05
**/
@Slf4j
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public RedisTemplate<Serializable, Serializable> redisTemplate(
JedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Serializable, Serializable> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.afterPropertiesSet();
redisTemplate.opsForValue().get(SysConstant.PROJECT_NAME);
log.info("-------------------------------------------------");
log.info("---------------local redis success---------------");
log.info("-------------------------------------------------");
return redisTemplate;
}
/**
* 1
*
* @return
*/
@Bean
public MessageListenerAdapter listenerAdapter(ReceiveMessage receiveMessage) {
MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(receiveMessage, "receiveMessage");
messageListenerAdapter.setSerializer(new JdkSerializationRedisSerializer());
return messageListenerAdapter;
}
/**
* 2
*
* @return
*/
@Bean
public MessageListenerAdapter listenerAdapter2(ReceiveMessage receiveMessage) {
MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(receiveMessage, "receiveMessage2");
messageListenerAdapter.setSerializer(new JdkSerializationRedisSerializer());
return messageListenerAdapter;
}
/**
*
*
* @param connectionFactory
* @param listenerAdapter
* @param listenerAdapter2
* @return
*/
@Bean
public RedisMessageListenerContainer container(JedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter,
MessageListenerAdapter listenerAdapter2) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, new PatternTopic(SysConstant.Redis.END_ORDER_MESSAGE_CHANNLE));
container.addMessageListener(listenerAdapter2, new PatternTopic(SysConstant.Redis.CHANNLE_TWO));
return container;
}
/**
* 1
*
* @return
*/
@Bean
public ReceiveMessage receiveMessage(CountDownLatch countDownLatch) {
return new ReceiveMessage(countDownLatch);
}
/**
* 2
*
* @return
*/
@Bean
public ReceiveMessage receiveMessage2(CountDownLatch countDownLatch) {
return new ReceiveMessage(countDownLatch);
}
@Bean
public CountDownLatch countDownLatch() {
return new CountDownLatch(1);
}
}
// redis
@Autowired
private RedisService redisService;
// ,ReceiveMessage , redis
redisService.sendMessage("message2", " ");