<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Redis是一個基於記憶體的key-value結構資料庫。Redis 是網際網路技術領域使用最為廣泛的儲存中介軟體,它是「Remote Dictionary Service」的首字母縮寫,也就是「遠端字典服務」。
基於記憶體儲存,讀寫效能高
適合儲存熱點資料(熱點商品、資訊、新聞)
企業應用廣泛
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker. 翻譯為:Redis是一個開源的記憶體中的資料結構儲存系統,它可以用作:資料庫、快取和訊息中介軟體。
Redis是用C語言開發的一個開源的高效能鍵值對(key-value)資料庫,官方提供的資料是可以達到100000+的QPS(每秒內查詢次數)。它儲存的value型別比較豐富,也被稱為結構化的NoSql資料庫。
NoSql(Not Only SQL),不僅僅是SQL,泛指非關係型資料庫。NoSql資料庫並不是要取代關係型資料庫,而是關係型資料庫的補充。
關係型資料庫(RDBMS):
非關係型資料庫(NoSql):
Redis安裝包分為windows版和Linux版:
Windows版下載地址:https://github.com/microsoftarchive/redis/releases
Linux版下載地址: https://download.redis.io/releases/
下載後得到下面安裝包:
1)在Linux中安裝Redis
在Linux系統安裝Redis步驟:
安裝後重點檔案說明:
/usr/local/redis-4.0.0/src/redis-server:Redis服務啟動指令碼
/usr/local/redis-4.0.0/src/redis-cli:Redis使用者端指令碼
/usr/local/redis-4.0.0/redis.conf:Redis組態檔
2)在Windows中安裝Redis
Redis的Windows版屬於可攜式軟體,直接解壓即可使用,解壓後目錄結構如下:
1)Linux系統中啟動和停止Redis
執行Redis服務啟動指令碼檔案redis-server:
通過啟動紀錄檔可以看到,Redis預設埠號為6379。
通過redis-cli可以連線到原生的Redis服務,預設情況下不需要認證即可連線成功。
退出使用者端可以輸入exit或者quit命令。
2)Windows系統中啟動和停止Redis
Windows系統中啟動Redis,直接雙擊redis-server.exe即可啟動Redis服務,redis服務預設埠號為6379
雙擊redis-cli.exe即可啟動Redis使用者端,預設連線的是原生的Redis服務,而且不需要認證即可連線成功。
退出使用者端可以輸入exit或者quit命令。
前面我們已經啟動了Redis服務,預設情況下Redis啟動後是在前臺執行,而且使用者端不需要密碼就可以連線到Redis服務。如果我們希望Redis服務啟動後是在後臺執行,同時希望使用者端認證通過後才能連線到Redis服務,應該如果做呢?
此時就需要修改Redis的組態檔:
通過修改Redis組態檔可以進行如下設定:
1) 設定Redis服務後臺執行
將組態檔中的daemonize設定項改為yes,預設值為no。
注意:Windows版的Redis不支援後臺執行。
2) 設定Redis服務密碼
將組態檔中的 # requirepass foobared 設定項取消註釋,預設為註釋狀態。foobared為密碼,可以根據情況自己指定。
3) 設定允許使用者端遠端連線Redis服務
Redis服務預設只能使用者端本地連線,不允許使用者端遠端連線。將組態檔中的 bind 127.0.0.1 設定項註釋掉。
解釋說明:
Redis組態檔中 # 表示註釋
Redis組態檔中的設定項前面不能有空格,需要頂格寫
daemonize:用來指定redis是否要用守護執行緒的方式啟動,設定成yes時,代表開啟守護行程模式。在該模式下,redis會在後臺執行
requirepass:設定Redis的連線密碼
bind:如果指定了bind,則說明只允許來自指定網路卡的Redis請求。如果沒有指定,就說明可以接受來自任意一個網路卡的Redis請求。
注意:修改組態檔後需要重啟Redis服務設定才能生效,並且啟動Redis服務時需要顯示的指定組態檔:
1)Linux中啟動Redis服務
# 進入Redis安裝目錄 cd /usr/local/redis-4.0.0 # 啟動Redis服務,指定使用的組態檔 ./src/redis-server ./redis.conf
2)Windows中啟動Redis服務
由於Redis組態檔中開啟了認證校驗,即使用者端連線時需要提供密碼,此時使用者端連線方式變為:
解釋說明:
-h:指定連線的Redis服務的ip地址
-p:指定連線的Redis服務的埠號
-a:指定連線的Redis服務的密碼
Redis儲存的是key-value結構的資料,其中key是字串型別,value有5種常用的資料型別:
Redis 5種常用資料型別
解釋說明:
字串(string):普通字串,常用
雜湊(hash):適合儲存物件
列表(list):按照插入順序排序,可以有重複元素
集合(set):無序集合,沒有重複元素
有序集合(sorted set / zset):集合中每個元素關聯一個分數(score),根據分數升序排序,沒有重複元素
Redis 中字串型別常用命令:
更多命令可以參考Redis中文網:https://www.redis.net.cn
Redis hash 是一個string型別的 field 和 value 的對映表,hash特別適合用於儲存物件,常用命令:
Redis 列表是簡單的字串列表,按照插入順序排序,常用命令:
Redis set 是string型別的無序集合。集合成員是唯一的,這就意味著集合中不能出現重複的資料,常用命令:
Redis sorted set 有序集合是 string 型別元素的集合,且不允許重複的成員。每個元素都會關聯一個double型別的分數(score) 。redis正是通過分數來為集合中的成員進行從小到大排序。有序集合的成員是唯一的,但分數卻可以重複。
常用命令:
Redis中的通用命令,主要是針對key進行操作的相關命令:
前面我們講解了Redis的常用命令,這些命令是我們操作Redis的基礎,那麼我們在java程式中應該如何操作Redis呢?這就需要使用Redis的Java使用者端,就如同我們使用JDBC操作MySQL資料庫一樣。
Redis 的 Java 使用者端很多,官方推薦的有三種:
Spring 對 Redis 使用者端進行了整合,提供了 Spring Data Redis,在Spring Boot專案中還提供了對應的Starter,即 spring-boot-starter-data-redis。
Jedis 是 Redis 的 Java 版本的使用者端實現。
maven座標:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.0</version> </dependency>
使用 Jedis 操作 Redis 的步驟:
範例程式碼:
package com.execise.test; import org.junit.Test; import redis.clients.jedis.Jedis; import java.util.Set; /** * 使用Jedis操作Redis */ public class JedisTest { @Test public void testRedis(){ //1 獲取連線 Jedis jedis = new Jedis("localhost",6379); //2 執行具體的操作 jedis.set("username","xiaoming"); String value = jedis.get("username"); System.out.println(value); //jedis.del("username"); jedis.hset("myhash","addr","bj"); String hValue = jedis.hget("myhash", "addr"); System.out.println(hValue); Set<String> keys = jedis.keys("*"); for (String key : keys) { System.out.println(key); } //3 關閉連線 jedis.close(); } }
Spring Data Redis 是 Spring 的一部分,提供了在 Spring 應用中通過簡單的設定就可以存取 Redis 服務,對 Redis 底層開發包進行了高度封裝。在 Spring 專案中,可以使用Spring Data Redis來簡化 Redis 操作。
網址:https://spring.io/projects/spring-data-redis
maven座標:
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.4.8</version> </dependency>
Spring Boot提供了對應的Starter,maven座標:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
Spring Data Redis中提供了一個高度封裝的類:RedisTemplate,針對 Jedis 使用者端中大量api進行了歸類封裝,將同一型別操作封裝為operation介面,具體分類如下:
第一步:建立maven專案springdataredis_demo,設定pom.xml檔案
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.5</version> <relativePath/> </parent> <groupId>com.execise</groupId> <artifactId>springdataredis_demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.4.5</version> </plugin> </plugins> </build> </project>
第二步:編寫啟動類
package com.execise; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class,args); } }
第三步:設定application.yml
spring: application: name: springdataredis_demo #Redis相關設定 redis: host: localhost port: 6379 #password: 123456 database: 0 #操作的是0號資料庫 jedis: #Redis連線池設定 pool: max-active: 8 #最大連線數 max-wait: 1ms #連線池最大阻塞等待時間 max-idle: 4 #連線池中的最大空閒連線 min-idle: 0 #連線池中的最小空閒連線
解釋說明:
spring.redis.database:指定使用Redis的哪個資料庫,Redis服務啟動後預設有16個資料庫,編號分別是從0到15。
可以通過修改Redis組態檔來指定資料庫的數量。
第四步:提供設定類
package com.execise.config; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; /** * Redis設定類 */ @Configuration public class RedisConfig extends CachingConfigurerSupport { @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); //預設的Key序列化器為:JdkSerializationRedisSerializer redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); redisTemplate.setConnectionFactory(connectionFactory); return redisTemplate; } }
解釋說明:
當前設定類不是必須的,因為 Spring Boot 框架會自動裝配 RedisTemplate 物件,但是預設的key序列化器為JdkSerializationRedisSerializer,導致我們存到Redis中後的資料和原始資料有差別
第五步:提供測試類
package com.execise.test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest @RunWith(SpringRunner.class) public class SpringDataRedisTest { @Autowired private RedisTemplate redisTemplate; }
操作字串型別資料
/** * 操作String型別資料 */ @Test public void testString(){ //存值 redisTemplate.opsForValue().set("city123","beijing"); //取值 String value = (String) redisTemplate.opsForValue().get("city123"); System.out.println(value); //存值,同時設定過期時間 redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS); //存值,如果存在則不執行任何操作 Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing"); System.out.println(aBoolean); }
操作雜湊型別資料
/** * 操作Hash型別資料 */ @Test public void testHash(){ HashOperations hashOperations = redisTemplate.opsForHash(); //存值 hashOperations.put("002","name","xiaoming"); hashOperations.put("002","age","20"); hashOperations.put("002","address","bj"); //取值 String age = (String) hashOperations.get("002", "age"); System.out.println(age); //獲得hash結構中的所有欄位 Set keys = hashOperations.keys("002"); for (Object key : keys) { System.out.println(key); } //獲得hash結構中的所有值 List values = hashOperations.values("002"); for (Object value : values) { System.out.println(value); } }
操作列表型別資料
/** * 操作List型別的資料 */ @Test public void testList(){ ListOperations listOperations = redisTemplate.opsForList(); //存值 listOperations.leftPush("mylist","a"); listOperations.leftPushAll("mylist","b","c","d"); //取值 List<String> mylist = listOperations.range("mylist", 0, -1); for (String value : mylist) { System.out.println(value); } //獲得列表長度 llen Long size = listOperations.size("mylist"); int lSize = size.intValue(); for (int i = 0; i < lSize; i++) { //出佇列 String element = (String) listOperations.rightPop("mylist"); System.out.println(element); } }
操作集合型別資料
/** * 操作Set型別的資料 */ @Test public void testSet(){ SetOperations setOperations = redisTemplate.opsForSet(); //存值 setOperations.add("myset","a","b","c","a"); //取值 Set<String> myset = setOperations.members("myset"); for (String o : myset) { System.out.println(o); } //刪除成員 setOperations.remove("myset","a","b"); //取值 myset = setOperations.members("myset"); for (String o : myset) { System.out.println(o); } }
操作有序集合型別資料
/** * 操作ZSet型別的資料 */ @Test public void testZset(){ ZSetOperations zSetOperations = redisTemplate.opsForZSet(); //存值 zSetOperations.add("myZset","a",10.0); zSetOperations.add("myZset","b",11.0); zSetOperations.add("myZset","c",12.0); zSetOperations.add("myZset","a",13.0); //取值 Set<String> myZset = zSetOperations.range("myZset", 0, -1); for (String s : myZset) { System.out.println(s); } //修改分數 zSetOperations.incrementScore("myZset","b",20.0); //取值 myZset = zSetOperations.range("myZset", 0, -1); for (String s : myZset) { System.out.println(s); } //刪除成員 zSetOperations.remove("myZset","a","b"); //取值 myZset = zSetOperations.range("myZset", 0, -1); for (String s : myZset) { System.out.println(s); } }
通用操作
/** * 通用操作,針對不同的資料型別都可以操作 */ @Test public void testCommon(){ //獲取Redis中所有的key Set<String> keys = redisTemplate.keys("*"); for (String key : keys) { System.out.println(key); } //判斷某個key是否存在 Boolean uname = redisTemplate.hasKey("uname"); System.out.println(uname); //刪除指定key redisTemplate.delete("myZset"); //獲取指定key對應的value的資料型別 DataType dataType = redisTemplate.type("myset"); System.out.println(dataType.name()); }
到此這篇關於Linux、Windows下Redis的安裝即Redis的基本使用詳解的文章就介紹到這了,更多相關Redis安裝使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45