一.Redis簡(jiǎn)介
1.Redis(Remote Dictionary Server ):
即遠(yuǎn)程字典服務(wù),是一個(gè)開(kāi)源的使用ANSI C語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API。從2010年3月15日起,Redis的開(kāi)發(fā)工作由VMware主持。從2013年5月開(kāi)始,Redis的開(kāi)發(fā)由Pivotal贊助。
2.redis是一個(gè)基于內(nèi)存的緩存數(shù)據(jù)庫(kù),不同于mysql,oracle這類(lèi)關(guān)系型數(shù)據(jù)庫(kù),Redis是一個(gè)非關(guān)系型數(shù)據(jù)庫(kù).
3.特點(diǎn):
(1)內(nèi)存作為數(shù)據(jù)存儲(chǔ)介質(zhì)。1.珍貴,2.讀寫(xiě)效率極?,遠(yuǎn)超數(shù)據(jù)庫(kù)。需要異步的同步到磁盤(pán)
上,所以,持久化?式有兩種。
(2)?關(guān)系型數(shù)據(jù)庫(kù),所以KeyValue形式存儲(chǔ),數(shù)據(jù)類(lèi)型value有多種,常?的有5種。
(3)與 memcache 不同的是,但有持久化操作,可以作為數(shù)據(jù)庫(kù)使?。持久化?式兩種:快照
模式,aof?志追加模式。
(4)主從模式,主服務(wù)器和備服務(wù)器,哨兵模式。
(5) 緩存過(guò)程:第?次取,將數(shù)據(jù)從數(shù)據(jù)庫(kù)讀取,都放在內(nèi)存中的redis中,緩存,第?次,直
接從內(nèi)存的redis去取,節(jié)約了應(yīng)?程序服務(wù)器和數(shù)據(jù)庫(kù)通過(guò)io交互的次數(shù)。
4.執(zhí)行redis的指令
//1. 啟動(dòng)redis服務(wù)端
redis-server redis.windows.conf
//2. 啟動(dòng)redis客戶(hù)端
//重啟?個(gè)cmd,之前的不能關(guān),是服務(wù)器
redis-cli.exe -p 6379
redis-cli.exe -h localhost -p 6379
//3. 服務(wù)器和客戶(hù)端是否接上頭
ping
//4. 設(shè)置密碼
//服務(wù)器不重啟?直這個(gè)密碼
config set requirepass abc
5.五大數(shù)據(jù)類(lèi)型:
Redis有五大數(shù)據(jù)類(lèi)型,分別是:
(1)String
(2)list
(3)hash
(4)set
(5)zset
對(duì)應(yīng)指令:
//選擇數(shù)據(jù)庫(kù),默認(rèn)0-15有16個(gè)數(shù)據(jù)庫(kù)
select 2
//1. 設(shè)置獲取 string
set hello world
get hello
//2. 存儲(chǔ) hash 類(lèi)型,適合存儲(chǔ)對(duì)象。
hmset stu sid 02142010 score 99
hgetall stu
hget stu sid
//3. lists:(1)重復(fù)有序,返回下標(biāo)索引。(2)redis的list基于鏈表,查詢(xún)慢,插?刪除快。
//左側(cè)插?
lpush subject java
lpush subject html5
lpush subject python
lrange subject 1 100
//右側(cè)插?
rpush bike hello
rpush bike ofo
rpush bike mobike
lrange bike 0 100
rpush bike hello
//4. set ?序集合,不重復(fù),返回受影響?數(shù)。
sadd week monday
sadd week thuresday
sadd week Wednesday
sadd week thrusday
smembers week
//5. zset 有序集合,不重復(fù)。
zadd java 100 yiyi
zadd java 100 erer
zadd java 99 sansan
zrangebyscore java 0 99
zrangebyscore java 100 100
6.安全:
redis可以設(shè)置密碼:
//設(shè)置密碼,默認(rèn)沒(méi)有密碼
set requirepass abc
auth abc
二.Jedis
1.簡(jiǎn)介:
jedis是java用來(lái)訪(fǎng)問(wèn)redis數(shù)據(jù)庫(kù)的api。
2.引入依賴(lài)
本次引入了一個(gè)Redis的jar包,
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
</dependency>
</dependencies>
3.測(cè)試代碼:
TestRedis.java
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TestJedis {
Jedis j =null;
@Before
public void setUp(){
j = new Jedis();
}
@After
public void tearDown(){
if(j != null){
j.close();
j = null;
}
}
@Test
public void test(){
//j = new Jedis("127.0.0.1",6379);
System.out.println(j.ping());
}
@Test
public void testString(){
System.out.println(j.set("aaa","123"));
System.out.println(j.get("aaa"));
}
@Test
public void testHash(){
Map<String,String> h1 = new HashMap<>();
h1.put("jack","jackValue");
System.out.println(j.hmset("actor",h1));
System.out.println(j.hgetAll("actor"));
System.out.println(j.hget("actor", "jack"));
}
@Test
public void testList(){
System.out.println(j.lpush("person", "wx"));
System.out.println(j.lpush("person", "hwl"));
System.out.println(j.lpush("person", "gj", "gx", "wsk"));
System.out.println(j.lrange("person",0,100));
}
@Test
public void testSet(){
System.out.println(j.sadd("food", "duck", "beef", "fork"));
System.out.println(j.smembers("food"));
}
@Test
public void testZSet(){
System.out.println(j.zadd("fs", 100, "java"));
System.out.println(j.zadd("fs", 99, "html5"));
System.out.println(j.zadd("fs", 79, "testing"));
System.out.println(j.zadd("fs", 59, "python"));
System.out.println(j.zrangeByScore("fs", 60, 99));
}
@Test
public void testPool(){
GenericObjectPoolConfig config = new GenericObjectPoolConfig();
//設(shè)置最大的空閑數(shù)
config.setMaxIdle(20);
//設(shè)置最大的連接數(shù)
config.setMaxTotal(50);
//設(shè)置等待時(shí)間
config.setMaxWaitMillis(5000);
List<JedisShardInfo> shard = new ArrayList<>();
shard.add(new JedisShardInfo("localhost","6379"));
ShardedJedisPool pool = new ShardedJedisPool(config,shard);
ShardedJedis jedis = pool.getResource();
System.out.println(jedis.get("aaa"));
}
}
今天是我在千鋒線(xiàn)上學(xué)習(xí)的第53天,加油!!!