?哈嘍~大家好,這篇來看看Redis快速入門及在Java中使用Redis。
???個(gè)人主頁:個(gè)人主頁?????? ? ? ? ? ? ?
???系列專欄:【微服務(wù)】? ? ? ?
??與這篇相關(guān)的文章:? ? ? ? ? ??
SpringCloud Sentinel 使用 SpringCloud Sentinel 使用_程序猿追的博客-CSDN博客 SpringCloud 網(wǎng)關(guān) Gateway SpringCloud 網(wǎng)關(guān) Gateway_springcloud gateway war_程序猿追的博客-CSDN博客 Docker 講解與基本操作 Docker 講解與基本操作_docker load<文件路徑_程序猿追的博客-CSDN博客
號外號外,我最近發(fā)現(xiàn)了一個(gè)非常棒的人工智能學(xué)習(xí)網(wǎng)站,它的內(nèi)容通俗易懂,風(fēng)趣幽默,讓人印象深刻。我想和大家分享這個(gè)網(wǎng)站,點(diǎn)擊鏈接即可訪問。
目錄
一、Redis入門
1、Redis簡介
2、Redis服務(wù)啟動與停止
3、設(shè)置密碼
二、Redis數(shù)據(jù)類型
1、五種常用數(shù)據(jù)類型介紹
2、Redis常用命令
2.1、字符串操作命令
2.2、哈希操作命令
2.3、列表操作命令
2.4、集合操作命令
2.5、有序集合操作命令
2.6、通用命令
2.7、小結(jié)
三、在 Java 中使用 Redis
1、導(dǎo)入Starter,maven坐標(biāo)
2、配置數(shù)據(jù)源
3、編寫配置類,創(chuàng)建RedisTemplate對象
4、環(huán)境搭建
4.1、操作字符串類型數(shù)據(jù)
4.2、操作哈希類型數(shù)據(jù)?
4.3、操作列表類型數(shù)據(jù)
4.4、操作集合類型數(shù)據(jù)
4.5、操作有序集合類型數(shù)據(jù)
?4.6、通用命令操作
4.7、小結(jié)
一、Redis入門
1、Redis簡介
Redis是一個(gè)基于內(nèi)存的key-value結(jié)構(gòu)數(shù)據(jù)庫。Redis 是互聯(lián)網(wǎng)技術(shù)領(lǐng)域使用最為廣泛的存儲中間件。
官網(wǎng):Redis 中文網(wǎng):Redis中文網(wǎng)
特點(diǎn):基于內(nèi)存存儲,讀寫性能高、適合存儲熱點(diǎn)數(shù)據(jù)(熱點(diǎn)商品、資訊、新聞)、企業(yè)應(yīng)用廣泛。
Redis是用C語言開發(fā)的一個(gè)開源的高性能鍵值對(key-value)數(shù)據(jù)庫,官方提供的數(shù)據(jù)是可以達(dá)到100000+的QPS(每秒內(nèi)查詢次數(shù))。它存儲的value類型比較豐富,也被稱為結(jié)構(gòu)化的NoSql(NoSql(Not Only SQL),不僅僅是SQL,泛指非關(guān)系型數(shù)據(jù)庫。NoSql數(shù)據(jù)庫并不是要取代關(guān)系型數(shù)據(jù)庫,而是關(guān)系型數(shù)據(jù)庫的補(bǔ)充。 )數(shù)據(jù)庫。
2、Redis服務(wù)啟動與停止
在安裝好的目錄地址欄輸入cmd,控制臺輸入?redis-server.exe redis.windows.conf ,Redis服務(wù)默認(rèn)端口號為 6379 ,通過快捷鍵Ctrl + C 即可停止Redis服務(wù),當(dāng)Redis服務(wù)啟動成功后,可通過客戶端進(jìn)行連接。
然后在打開一個(gè)cmd界面,輸入redis-cli.exe ,啟動
3、設(shè)置密碼
設(shè)置Redis服務(wù)密碼,修改redis.windows.conf,按ctrl + f鍵查找 pass字段,將requirepass 后面的值改為 123456,然后取消注釋。
注:修改密碼后需要重啟Redis服務(wù)才能生效、Redis配置文件中 # 表示注釋,重啟Redis后,再次連接Redis時(shí),需加上密碼,否則連接失敗。
redis-cli.exe -h localhost -p 6379 -a 123456
二、Redis數(shù)據(jù)類型
以下操作我們在圖形化界面演示。
1、五種常用數(shù)據(jù)類型介紹
Redis存儲的是key-value結(jié)構(gòu)的數(shù)據(jù),其中key是字符串類型,value有5種常用的數(shù)據(jù)類型:字符串 string、哈希 hash、列表 list、集合 set、有序集合 sorted set / zset。
解釋說明
字符串(string):普通字符串,Redis中最簡單的數(shù)據(jù)類型。
哈希(hash):也叫散列,類似于Java中的HashMap結(jié)構(gòu)。
列表(list):按照插入順序排序,可以有重復(fù)元素,類似于Java中的LinkedList。
集合(set):無序集合,沒有重復(fù)元素,類似于Java中的HashSet。
有序集合(sorted set/zset):集合中每個(gè)元素關(guān)聯(lián)一個(gè)分?jǐn)?shù)(score),根據(jù)分?jǐn)?shù)升序排序,沒有重復(fù)元素。
2、Redis常用命令
2.1、字符串操作命令
Redis 中字符串類型常用命令:
SET key value 設(shè)置指定key的值。
GET key 獲取指定key的值。
SETEX key seconds value 設(shè)置指定key的值,并將 key 的過期時(shí)間設(shè)為 seconds 秒。
100秒之后它會自動銷毀。?
SETNX key value 只有在 key 不存在時(shí)設(shè)置 key 的值。
可以理解為這個(gè)key是唯一的,第一次設(shè)置值第二次就不能對它進(jìn)行修改了。
2.2、哈希操作命令
Redis hash 是一個(gè)string類型的 field 和 value 的映射表,hash特別適合用于存儲對象,常用命令:
HSET key field value 將哈希表 key 中的字段 field 的值設(shè)為 value
HGET key field 獲取存儲在哈希表中指定字段的值
HDEL key field 刪除存儲在哈希表中的指定字段
這次我們再來查詢,它就為null了。
HKEYS key 獲取哈希表中所有字段
HVALS key 獲取哈希表中所有值
2.3、列表操作命令
Redis 列表是簡單的字符串列表,按照插入順序排序,常用命令:
LPUSH key value1 [value2] 將一個(gè)或多個(gè)值插入到列表頭部。
LRANGE key start stop 獲取列表指定范圍內(nèi)的元素
RPOP key 移除并獲取列表最后一個(gè)元素
注意:他這個(gè)插入就是一個(gè)棧,刪除的也是最先插入的。
LLEN key 獲取列表長度。
BRPOP key1 [key2 ] timeout 移出并獲取列表的最后一個(gè)元素, 如果列表沒有元素會阻塞列表直到等待超時(shí)或發(fā)現(xiàn)可彈出元素為止,設(shè)置超時(shí)時(shí)間,否則將一直阻塞。
2.4、集合操作命令
Redis set 是string類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現(xiàn)重復(fù)的數(shù)據(jù),常用命令:
SADD key member1 [member2] 向集合添加一個(gè)或多個(gè)成員
SMEMBERS key 返回集合中的所有成員
SCARD key 獲取集合的成員數(shù)
SINTER key1 [key2] 返回給定所有集合的交集
SUNION key1 [key2] 返回所有給定集合的并集。
SREM key member1 [member2] 移除集合中一個(gè)或多個(gè)成員。
2.5、有序集合操作命令
Redis有序集合是string類型元素的集合,且不允許有重復(fù)成員。每個(gè)元素都會關(guān)聯(lián)一個(gè)double類型的分?jǐn)?shù),根據(jù)分?jǐn)?shù)來進(jìn)行排序。常用命令:
常用命令:
ZADD key score1 member1 [score2 member2] 向有序集合添加一個(gè)或多個(gè)成員。
ZRANGE key start stop [WITHSCORES] 通過索引區(qū)間返回有序集合中指定區(qū)間內(nèi)的成員。
ZINCRBY key increment member 有序集合中對指定成員的分?jǐn)?shù)加上增量 increment。
ZREM key member [member ...] 移除有序集合中的一個(gè)或多個(gè)成員。
2.6、通用命令
Redis的通用命令是不分?jǐn)?shù)據(jù)類型的,都可以使用的命令:
KEYS pattern 查找所有符合給定模式(pattern)的 key。
EXISTS key 檢查給定 key 是否存在。
TYPE key 返回 key 所儲存的值的類型。
DEL key 該命令用于在 key 存在是刪除 key。
2.7、小結(jié)
字符串類型操作指令開頭一般為s開頭(SET 、GET、SETEX 、SETNX )
哈希操作命令操作指令開頭一般為h開頭(HSET ???????、HGET ???????、HDEL ???????、HKEYS ???????、HVALS )
列表操作命令指令開頭一般為l開頭(LPUSH ???????、LRANGE ???????、RPOP ???????、LLEN ???????、BRPOP )
集合操作命令指令開頭一般為s開頭(SADD?、SMEMBERS ???????、SCARD ???????、SINTER 、SUNION ???????、SREM )
有序集合操作命令指令開頭一般為z開頭(ZADD ???????、ZRANGE ???????、ZINCRBY ???????、ZREM )
三、在 Java 中使用 Redis
Spring Data Redis 是 Spring 的一部分,提供了在 Spring 應(yīng)用中通過簡單的配置就可以訪問 Redis 服務(wù),對 Redis 底層開發(fā)包進(jìn)行了高度封裝。在 Spring 項(xiàng)目中,可以使用Spring Data Redis來簡化 Redis 操作。
1、導(dǎo)入Starter,maven坐標(biāo)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Spring Data Redis中提供了一個(gè)高度封裝的類:RedisTemplate,對相關(guān)api進(jìn)行了歸類封裝,將同一類型操作封裝為operation接口,具體分類如下:
ValueOperations:string數(shù)據(jù)操作
SetOperations:set類型數(shù)據(jù)操作
ZSetOperations:zset類型數(shù)據(jù)操作
HashOperations:hash類型的數(shù)據(jù)操作
ListOperations:list類型的數(shù)據(jù)操作
2、配置數(shù)據(jù)源
在application-dev.yml中添加
xxx:
redis:
host: localhost
port: 6379
password: 123456
database: 10
注:database:指定使用Redis的哪個(gè)數(shù)據(jù)庫,Redis服務(wù)啟動后默認(rèn)有16個(gè)數(shù)據(jù)庫,編號分別是從0到15。
可以通過修改Redis配置文件來指定數(shù)據(jù)庫的數(shù)量。
在application.yml中添加讀取application-dev.yml中的相關(guān)Redis配置。
spring:
profiles:
active: dev
redis:
host: ${xxx.redis.host}
port: ${xxx.redis.port}
password: ${xxx.redis.password}
database: ${xxx.redis.database}
3、編寫配置類,創(chuàng)建RedisTemplate對象
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("開始創(chuàng)建redis模板對象...");
RedisTemplate redisTemplate = new RedisTemplate();
//設(shè)置redis的連接工廠對象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//設(shè)置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}
注:當(dāng)前配置類不是必須的,因?yàn)?Spring Boot 框架會自動裝配 RedisTemplate 對象,但是默認(rèn)的key序列化器為JdkSerializationRedisSerializer,導(dǎo)致我們存到Redis中后的數(shù)據(jù)和原始數(shù)據(jù)有差別,故設(shè)置為StringRedisSerializer序列化器。
4、環(huán)境搭建
創(chuàng)建一個(gè)test類,將RedisTemplate自動裝配注入進(jìn)來。
4.1、操作字符串類型數(shù)據(jù)
@Autowired
private RedisTemplate redisTemplate;
@Test
public void test01(){
redisTemplate.opsForValue().set("name","小明"); // 設(shè)置k v
String city = (String) redisTemplate.opsForValue().get("name"); // 拿到key為name的值
System.out.println(city);
redisTemplate.opsForValue().set("code","1234",3, TimeUnit.MINUTES); // 設(shè)置過期時(shí)間為三分鐘
redisTemplate.opsForValue().setIfAbsent("lock","1"); // 設(shè)置lock為k的唯一值
redisTemplate.opsForValue().setIfAbsent("lock","2");
}
控制臺輸出
圖形化界面
4.2、操作哈希類型數(shù)據(jù)?
@Test
public void test02(){
//hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("100","name","tom"); // 設(shè)置k為100,哈希k為name v為100
hashOperations.put("100","age","20");
String name = (String) hashOperations.get("100", "name"); // 獲取k為100,hashk為name的v
System.out.println(name);
Set keys = hashOperations.keys("100"); // 獲取k為100的集合k
System.out.println(keys);
List values = hashOperations.values("100"); // 獲取k為100的集合v
System.out.println(values);
hashOperations.delete("100","age"); // 刪除age字段
}
控制臺輸出?
4.3、操作列表類型數(shù)據(jù)
@Test
public void test03(){
//lpush lrange rpop llen
ListOperations listOperations = redisTemplate.opsForList();
listOperations.leftPushAll("mylist","a","b","c"); // 往k為mylist插入a,b,c
listOperations.leftPush("mylist","d"); // 插入d
List mylist = listOperations.range("mylist", 0, -1);
System.out.println(mylist); // 輸出
listOperations.rightPop("mylist"); // 刪除
Long size = listOperations.size("mylist");
System.out.println(size);
System.out.println(listOperations.range("mylist", 0, -1));
}
4.4、操作集合類型數(shù)據(jù)
@Test
public void test4(){
//sadd smembers scard sinter sunion srem
SetOperations setOperations = redisTemplate.opsForSet();
setOperations.add("set1","a","b","c","d"); // 往set1 插入abcd
setOperations.add("set2","a","b","x","y"); // 往set2 插入abxy
Set members = setOperations.members("set1");
System.out.println(members); // 輸出
Long size = setOperations.size("set1");
System.out.println(size); // 輸出
Set intersect = setOperations.intersect("set1", "set2"); // 他們的交集
System.out.println(intersect);
Set union = setOperations.union("set1", "set2");// 他們的并集
System.out.println(union);
setOperations.remove("set1","a","b"); // 在set1里面刪除ab
}
4.5、操作有序集合類型數(shù)據(jù)
/**
* 操作有序集合類型的數(shù)據(jù)
*/
@Test
public void test05(){
//zadd zrange zincrby zrem
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
zSetOperations.add("zset1","a",10); // 設(shè)置k為zset1v為a,分?jǐn)?shù)為10
zSetOperations.add("zset1","b",12); //同理
zSetOperations.add("zset1","c",9); // 同理
Set zset1 = zSetOperations.range("zset1", 0, -1);
System.out.println(zset1); // 輸出
zSetOperations.incrementScore("zset1","c",10); // 為k為zset1v為c的加10分
zSetOperations.remove("zset1","a","b"); // 刪除ab
}
?4.6、通用命令操作
@Test
public void test06(){
//keys exists type del
Set keys = redisTemplate.keys("*"); // 查找所有符合給定模式( pattern)的 key
System.out.println(keys);
Boolean name = redisTemplate.hasKey("name");
Boolean set1 = redisTemplate.hasKey("set1");
for (Object key : keys) {
DataType type = redisTemplate.type(key); // 查找他們的類型是什么
System.out.println(type.name());
}
redisTemplate.delete("mylist"); // 刪除mylist
}
4.7、小結(jié)
Spring Data Redis中提供了一個(gè)高度封裝的類:RedisTemplate,對相關(guān)api進(jìn)行了歸類封裝,將同一類型操作封裝為operation接口,具體分類如下:
ValueOperations:string數(shù)據(jù)操作
SetOperations:set類型數(shù)據(jù)操作
ZSetOperations:zset類型數(shù)據(jù)操作
HashOperations:hash類型的數(shù)據(jù)操作
ListOperations:list類型的數(shù)據(jù)操作
通過RedisTemplate對象操作Redis
@Test
public void test07(){
System.out.println(redisTemplate);
//string數(shù)據(jù)操作
ValueOperations valueOperations = redisTemplate.opsForValue();
//hash類型的數(shù)據(jù)操作
HashOperations hashOperations = redisTemplate.opsForHash();
//list類型的數(shù)據(jù)操作
ListOperations listOperations = redisTemplate.opsForList();
//set類型數(shù)據(jù)操作
SetOperations setOperations = redisTemplate.opsForSet();
//zset類型數(shù)據(jù)操作
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
System.out.println("valueOperations: " + valueOperations);
System.out.println("hashOperations: " + hashOperations);
System.out.println("listOperations: " + listOperations);
System.out.println("setOperations: " + setOperations);
System.out.println("zSetOperations: " + zSetOperations);
}
不積跬步無以至千里,趁年輕,使勁拼,給未來的自己一個(gè)交代!向著明天更好的自己前進(jìn)吧!文章來源:http://www.zghlxwxcb.cn/news/detail-765615.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-765615.html
到了這里,關(guān)于Redis快速入門及在Java中使用Redis的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!