亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Redis安裝及常用命令介紹

2024-07-21 02:51:34
字體:
來源:轉載
供稿:網友

Redis


Windows中安裝Redis

Redis官網所給的Redis安裝包只是基于linux系統的去操作的,所以想在windows系統中使用Redis服務,需要去下面的網址去下載對應的版本: https://github.com/MSOpenTech/redis/releases/tag/win-3.2.100 下載最新版本即可,如Redis-x64-3.2.100.zip。

下載完成后解壓,查看文件夾中是否有以下三個文件: 這里寫圖片描述

打開cmd窗口,進入到Redis所在文件夾。 執行redis-server.exe redis.windows.conf命令,如出現Redis的LOGO,代表開啟Redis服務成功。 這里寫圖片描述

安裝成功后,此窗口不要關閉 ,再新開一個cmd窗口,輸入redis-cli.exe命令,即可進行Redis命令的操作。 測試是否連接成功:輸入PING,如果顯示PONG,即成功。 這里寫圖片描述

再來個Redis的HelloWorld: 輸入命令:set age 22, 顯示OK后,再輸入命令:get age 即可得到age 的值:“22”。 這里寫圖片描述 是不是很簡單呢?下面將介紹Redis的基礎知識。


Redis的五大數據類型

Redis是完全開源免費的,用C語言編寫的,遵守BSD協議, 是一個高性能的(key/value)分布式內存數據庫,基于內存運行 并支持持久化的NoSQL數據庫,是當前最熱門的NoSql數據庫之一,也被人們稱為數據結構服務器。

Redis主要有五種數據類型,下面將一 一進行介紹以及每種數據類型的常用命令。

在介紹數據類型之前先介紹下Redis的鍵key的幾個常用命令。 這里寫圖片描述

以上是常用的幾個key的命令,在以下的范例中都會用到這些命令。

1. String字符串

String是Redis最基本的類型 . 特點:是一個key對應一個value。

String類型時二進制安全的,可以包含任何數據,比如jpg圖片或者系列化的對象。一個Redis字符串value最多可以是512M。

String的常用命令如下圖: 這里寫圖片描述

2. List列表

特點:單值多value??衫斫鉃橐粋€集合中存儲多個數。

List是一個字符串鏈表,鏈表左右端都可以插入添加; 如果鍵不存在,創建新的鏈表; 如果鍵已存在,新增內容; 如果值全移除,對應的鍵也就消失了。 鏈表的操作無論是頭和尾效率都極高,但假如是對中間元素進行操作,效率就很慘淡了。

List的常用命令如下圖: 這里寫圖片描述 這里寫圖片描述

3. Set集合 特點:單值多value。如java中Set集合類似。

Redis的Set是string類型的無序集合。它是通過HashTable實現實現的

Set的常用命令如下圖: 這里寫圖片描述

4. Zset(Sorted set)-有序集合 特點:Zset是在set基礎上,加一個score值。

Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員。 不同的是每個元素都會關聯一個double類型的分數。 redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重復

比如說之前set是k1 v1 v2 v3, 現在zset是k1 score1 v1 score2 v2 score3 v3 在游戲中經常用到這種概念,比如在打怪的時候,每個人的排名是依據每個玩家所得分數進行排名的。這個分數就是score。

Zset的常用命令如下圖: 這里寫圖片描述

這里寫圖片描述

5. Hash哈希 特點:鍵值KV模式不變,不同的是V是一個鍵值對。

Redis hash 是一個鍵值對集合。 Redis hash是一個string類型的field和value的映射表,hash特別適合用于存儲對象。

Hash的常用命令如下: 這里寫圖片描述


Redis的Java客戶端Jedis的操作

Redis支持的客戶端操作語言非常豐富,達到40多種。就Java來說,最常用的還是客戶端Jedis。Jedis使用簡單,基本和Redis命令行語法相似。

本節主要是介紹Java中如何操作Redis。因為在Java中真正操作Redis并不是很多,所以本節只做一些了解性的介紹。

操作之前的準備: 1. Jedis需要添加兩個JAR包:

Commons-pool-1.6.jar Jedis-2.1.0.jar

如果是使用了MAVEN,就需要在pom.xml中加上依賴:

<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId></dependency>

若在SPRing中配置,還需加上依賴:

<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId></dependency>

2 . 本次操作環節既然是Windows, 需要在cmd窗口在中開啟Redis服務,才可進行下面的測試操作。 這里寫圖片描述

測試 1. 連接測試

import redis.clients.jedis.Jedis;/** * 連接測試 * @author wanggenshen_sx * */public class TestRedisConnection { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); System.out.println(jedis.ping()); }}

輸出PONG,即為連接成功。

2. Redis五大數據類型測試 String

import redis.clients.jedis.Jedis;/** * 測試Redis五大數據類型---String * @author wanggenshen_sx * */public class TestRedisAPIString { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.flushDB(); //set k1 AA k2 BB k3 CC jedis.set("k1", "AA"); jedis.set("k2", "BB"); jedis.set("k3", "CC"); jedis.set("k4", "DD"); jedis.set("k5", "EE"); //查:get k2 System.out.println(jedis.get("k2")); //查全部:keys * System.out.println(jedis.keys("*")); //刪:del k2 jedis.del("k1"); System.out.println(jedis.keys("*")); }}

輸出: BB [k3, k4, k5, k1, k2] [k3, k4, k5, k2]

List

import redis.clients.jedis.Jedis;/** * 測試Redis五大數據類型---List * @author wanggenshen_sx * */public class TestRedisAPIList { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); //清空數據庫:flush db jedis.flushDB(); //增:lpush list1 v1 // rpush list1 v3 jedis.lpush("list1", "v1"); jedis.lpush("list1", "v2"); jedis.rpush("list1", "v3"); //查:lrange list1 // llen list1 :集合list1的大小 System.out.println(jedis.lrange("list1", 0, jedis.llen("list1"))); //刪除元素:lrem list1 1 v2 // 從left往right刪除2個值等于v1的元素,返回的值為實際刪除的數量 jedis.lrem("list1", 1, "v2"); System.out.println(jedis.lrange("list1", 0, jedis.llen("list1"))); }}

輸出: [v2, v1, v3] [v1, v3]

HashMap

import java.util.HashMap;import redis.clients.jedis.Jedis;/** * 測試Redis五大數據類型---HashMap * K不變,V是鍵值對 * @author wanggenshen_sx * */public class TestRedisAPIHashMap { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); //清空數據庫:flush db jedis.flushDB(); //增:hset hash1 k1 v1 k2 v3 jedis.hset("hash1", "k1", "v1"); jedis.hset("hash1", "k2", "v2"); //批量添加:hmset hash1 k3 v3 k4 v4 k5 v5 HashMap<String, String> map = new HashMap<String, String>(); map.put("k3", "v3"); map.put("k4", "v4"); map.put("k5", "v5"); jedis.hmset("hash1", map); //查:hget hash1 k2 System.out.println(jedis.hget("hash1", "k2")); //批量查詢:hmget hash1 k1 k2 k3 System.out.println(jedis.hmget("hash1", "k1", "k2", "k3")); //刪除元素:hdel hash1 k4 jedis.hdel("hash1", "k4"); //獲取全部 System.out.println(jedis.hgetAll("hash1")); }}

輸出: v2 [v1, v2, v3] {k1=v1, k2=v2, k3=v3, k5=v5}

Set

import redis.clients.jedis.Jedis;/** * 測試Redis五大數據類型---Set * @author wanggenshen_sx * */public class TestRedisAPISet { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.flushDB(); //增:sadd set1 v1 v2 v3 jedis.sadd("set1", "v1"); jedis.sadd("set1", "v2"); jedis.sadd("set1", "v3"); jedis.sadd("set1", "v4"); jedis.sadd("set1", "v5"); //查:smemebers set1 System.out.println(jedis.smembers("set1")); //刪除元素:srem set1 v2 jedis.srem("set1", "v3"); System.out.println(jedis.smembers("set1")); }}

輸出: [v1, v2, v3, v4, v5] [v1, v2, v4, v5]

ZSet

import java.util.HashMap;import java.util.Map;import redis.clients.jedis.Jedis;/** * 測試Redis五大數據類型---ZSet * @author wanggenshen_sx * */public class TestRedisAPIZSet { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.flushDB(); //增:zadd zset1 60 v1 70 v2 80 v3 90 v4 100 v5 jedis.zadd("zset1", 60, "v1"); jedis.zadd("zset1", 70, "v2"); Map<Double, String> map = new HashMap<>(); map.put(80.00, "v3"); map.put(90.00, "v4"); map.put(100.00, "v5"); jedis.zadd("zset1", map); //查:zrange zset1 0 -1 System.out.println(jedis.zrange("zset1", 0, -1)); //查:zrange zset1 0 -1 with scores System.out.println(jedis.zrangeWithScores("zset1", 0, -1)); //刪除元素:zrem zset1 v2 jedis.zrem("zset1", "v2"); System.out.println(jedis.zrangeWithScores("zset1", 0, -1)); }}

輸出: [v1, v2, v3, v4, v5] [[[118, 49],60.0], [[118, 50],70.0], [[118, 51],80.0], [[118, 52],90.0], [[118, 53],100.0]] [[[118, 49],60.0], [[118, 51],80.0], [[118, 52],90.0], [[118, 53],100.0]]

3.JedisPool JedisPool的概念類似于線程池,即獲取Jedis實例需要從JedisPool中獲取,用完Jedis實例也需要還給JedisPool。 并且需要在finally中去關閉。

如下,先寫個操作JedisPool的工具類:

import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;/** * 使用單例模式獲取JedisPool實例 * */public class JedisPoolUtil { private static volatile JedisPool jedisPool = null; public static JedisPool getJedisPoolInstance(){ if(null == jedisPool){ synchronized(JedisPoolUtil.class){ JedisPoolConfig jedisPoolConfig = new JedisPoolConfig(); //控制一個pool可分配多少個jedis實例 jedisPoolConfig.setMaxActive(1000); //控制一個pool最多有多少個狀態為idle(空閑)的jedis實例 jedisPoolConfig.setMaxIdle(32); //表示當borrow一個jedis實例時,最大的等待時間,如果超過等待時間,則直接拋JedisConnectionException; jedisPoolConfig.setMaxWait(100*1000); //獲得一個jedis實例的時候是否檢查連接可用性(ping()) jedisPoolConfig.setTestOnBorrow(true); jedisPool = new JedisPool("127.0.0.1", 6379); } } return jedisPool; } public static void release(JedisPool jedisPool,Jedis jedis){ if(jedis != null){ jedisPool.returnResourceObject(jedis); } } public JedisPoolUtil(){}}

測試:

import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;public class TestRedisPool { public static void main(String[] args) { JedisPool jedisPool = JedisPoolUtil.getJedisPoolInstance(); Jedis jedis = null; try{ jedis = jedisPool.getResource(); jedis.set("aa", "bb"); System.out.println(jedis.get("aa")); }catch(Exception e) { e.printStackTrace(); }finally{ JedisPoolUtil.release(jedisPool, jedis); } }}

JedisPool的配置參數大部分是由JedisPoolConfig的對應項來賦值的。

Jedis的配置介紹: - maxActive:控制一個pool可分配多少個jedis實例,通過pool.getResource()來獲??;如果賦值為-1,則表示不限制;如果pool已經分配了maxActive個jedis實例,則此時pool的狀態為exhausted。 - maxIdle:控制一個pool最多有多少個狀態為idle(空閑)的jedis實例; whenExhaustedAction:表示當pool中的jedis實例都被allocated完時,pool要采取的操作;默認有三種。 WHEN_EXHAUSTED_FAIL –> 表示無jedis實例時,直接拋出NoSuchElementException; WHEN_EXHAUSTED_BLOCK –> 則表示阻塞住,或者達到maxWait時拋出JedisConnectionException; WHEN_EXHAUSTED_GROW –> 則表示新建一個jedis實例,也就說設置的maxActive無用; - maxWait:表示當borrow一個jedis實例時,最大的等待時間,如果超過等待時間,則直接拋JedisConnectionException; - testOnBorrow:獲得一個jedis實例的時候是否檢查連接可用性(ping());如果為true,則得到的jedis實例均是可用的; - testOnReturn:return 一個jedis實例給pool時,是否檢查連接可用性(ping()); - testWhileIdle:如果為true,表示有一個idle object evitor線程對idle object進行掃描,如果validate失敗,此object會被從pool中drop掉;這一項只有在 timeBetweenEvictionRunsMillis大于0時才有意義; - timeBetweenEvictionRunsMillis:表示idle object evitor兩次掃描之間要sleep的毫秒數; - numTestsPerEvictionRun:表示idle object evitor每次掃描的最多的對象數; - minEvictableIdleTimeMillis:表示一個對象至少停留在idle狀態的最短時間,然后才能被idle object evitor掃描并驅逐;這一項只有在timeBetweenEvictionRunsMillis大于0時才有意義 - softMinEvictableIdleTimeMillis:在minEvictableIdleTimeMillis基礎上,加入了至少minIdle個對象已經在pool里面了。如果為-1,evicted不會根據idle time驅逐任何對象。如果minEvictableIdleTimeMillis>0,則此項設置無意義,且只有在timeBetweenEvictionRunsMillis大于0時才有意義; - lifo:borrowObject返回對象時,是采用DEFAULT_LIFO(last in first out,即類似cache的最頻繁使用隊列),如果為False,則表示FIFO隊列;

================================================ 其中JedisPoolConfig對一些參數的默認設置如下:

testWhileIdle=true minEvictableIdleTimeMills=60000 timeBetweenEvictionRunsMillis=30000 numTestsPerEvictionRun=-1

(此處CSDN格式有問題,強迫癥實在受不鳥)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人精品xxx| 亚洲自拍偷拍视频| 国产视频在线观看一区二区| 国产精品女人网站| 91久久嫩草影院一区二区| 性欧美暴力猛交69hd| 伊人久久综合97精品| 亚洲成人黄色在线观看| 国产福利精品av综合导导航| 在线观看国产精品日韩av| 亚洲成人黄色网| 欧美裸体xxxx极品少妇软件| 97在线视频免费| 亚洲精品一区在线观看香蕉| 国产精品99久久久久久久久久久久| 亚洲另类图片色| 4388成人网| 精品女同一区二区三区在线播放| 欧美裸体xxxx极品少妇软件| 亚洲老板91色精品久久| 最近的2019中文字幕免费一页| 日韩av在线播放资源| 亚洲福利视频久久| 欧美在线一区二区三区四| 国产精品久久久久久久9999| 日韩欧美精品网址| 最近中文字幕mv在线一区二区三区四区| 久久久精品亚洲| 国产亚洲精品久久久久久牛牛| 欧美成人在线影院| 欧美—级高清免费播放| 久久久中精品2020中文| 久久人人97超碰精品888| 久久久精品国产一区二区| 精品香蕉在线观看视频一| 成人黄色片网站| 日本一区二区在线播放| 尤物tv国产一区| 日韩中文字幕精品| 91在线观看免费高清完整版在线观看| 欧美在线视频网站| 91久久国产精品| 欧美性视频网站| 久久久久久久一区二区| 日韩欧美在线免费观看| 亚洲成人激情小说| 91国语精品自产拍在线观看性色| 亚洲一区二区三区在线免费观看| 欧美激情综合色综合啪啪五月| 国语自产精品视频在线看| 欧美性xxxxhd| 亚洲综合精品一区二区| 亚洲第一中文字幕在线观看| 色综合久久精品亚洲国产| 欧美性生交xxxxx久久久| 国产精品久久色| 久久久久久国产精品三级玉女聊斋| 亚洲人成啪啪网站| 992tv成人免费视频| 亚洲一区亚洲二区| 中文字幕欧美精品日韩中文字幕| 国产一区二区三区中文| 国产欧美欧洲在线观看| 精品久久久久久亚洲精品| 久久成年人免费电影| 日韩有码在线观看| 国产成人综合久久| 亚洲欧美变态国产另类| 永久免费看mv网站入口亚洲| 精品国产一区二区三区久久狼5月| 国产日韩精品在线| 在线观看国产精品日韩av| 日韩精品在线观看一区| 91在线无精精品一区二区| 亚洲成人精品久久久| 久久97久久97精品免视看| 欧美久久久精品| 久久九九亚洲综合| 欧美视频精品一区| 亚洲欧洲黄色网| 亚洲国产欧美在线成人app| 久久中文字幕国产| 国产在线观看精品一区二区三区| 在线日韩av观看| 亚洲成人国产精品| 国内精品视频一区| 韩国欧美亚洲国产| 神马国产精品影院av| 久久精品成人欧美大片古装| 欧美性猛交xxxx富婆| xxxxx成人.com| 日韩在线观看你懂的| 欧美老少做受xxxx高潮| 国产午夜精品全部视频在线播放| 日本亚洲欧洲色α| 欧美在线国产精品| 日韩精品一区二区三区第95| 欧美日韩国产中文精品字幕自在自线| 国产v综合v亚洲欧美久久| 69av在线播放| 91久久国产婷婷一区二区| 亚洲精品综合精品自拍| 久久国内精品一国内精品| 久久97精品久久久久久久不卡| 高清欧美性猛交xxxx黑人猛交| 色偷偷亚洲男人天堂| 欧美日韩国产综合新一区| 国产999精品久久久| 国产精品白嫩美女在线观看| 欧美日韩美女视频| 欧美在线一区二区三区四| 美女福利视频一区| 中文字幕日韩精品在线| 亚洲日韩第一页| 欧美性极品xxxx做受| 免费97视频在线精品国自产拍| 国产精品毛片a∨一区二区三区|国| 欧美精品精品精品精品免费| 欧美日韩国产一区中文午夜| 国产精品网站入口| 亚洲欧美制服丝袜| www.xxxx精品| 国产日韩精品在线观看| 日本中文字幕久久看| 亚洲女同性videos| 国产欧美日韩高清| 亚洲国产精品嫩草影院久久| 久久久999成人| 中文字幕日韩精品有码视频| 久久精品久久精品亚洲人| 国产一区二区丝袜高跟鞋图片| 成人免费在线视频网址| 久久久精品网站| 国产精品中文久久久久久久| 亚洲午夜av电影| 国产精品在线看| 亚洲乱码国产乱码精品精天堂| 国产亚洲一区精品| 欧美交受高潮1| zzijzzij亚洲日本成熟少妇| 92看片淫黄大片看国产片| 欧美老肥婆性猛交视频| 欧美在线免费视频| 成人免费黄色网| 日韩av网站大全| 亚洲国产一区二区三区四区| 成人av资源在线播放| 久热在线中文字幕色999舞| 视频一区视频二区国产精品| 在线观看欧美www| 久久免费成人精品视频| www.日韩av.com| 亚洲另类xxxx| 久久精品国产精品| 成人黄色在线播放| 欧美日本国产在线| 日韩av综合网| 亚洲性av在线| 亚洲xxxx3d| 欧美激情精品久久久| 永久免费看mv网站入口亚洲| 欧美性猛交xxxx免费看漫画| 欧美性感美女h网站在线观看免费| 欧美尺度大的性做爰视频|