初學者可能對於redis的開發有一定的模糊,下面介紹如何操作redis。
redis分爲服務端,客戶端,客戶端去讀寫服務端的redis的時候,需要構造一些命令,並且通過socket傳過去,redis服務器與客戶端有自己的通信機制,舉一個例子客戶端需要存一個數據的時候 set mykey myvalue,需要構建這樣一條命令*3\r\n$3\r\n"SET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n傳輸到服務器,服務器解析這條命令做出響應的處理。 redis的java客戶端有自己封裝的jar包—jedis。jedis封裝了所有的redis命令,並且提供api給開發人員使用。
下面是一個簡單的jedis操作
<span style="font-size:14px;">import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class redisConcurrent {
private static JedisPool pool ;
void init() {
//創建連接池
redis.clients.jedis.JedisPoolConfig config = new redis.clients.jedis.JedisPoolConfig();
config.setMaxIdle(1000);
config.setMaxTotal(500);
pool = new JedisPool(config, "192.168.1.68", 6379, 2000,null, 9);
}
public static void main(String[] args) throws InterruptedException {
final redisConcurrent redisConcurrent = new redisConcurrent();
redisConcurrent.init();
final AtomicLong counter = new AtomicLong(0);
final AtomicBoolean stopFlag = new AtomicBoolean(false);
final int threadCount = 1000;
for (int i = 0; i < threadCount; i++) {
final String sss = i + "";
new Thread(new Runnable() {
@SuppressWarnings("deprecation")
@Override
public void run() {
while (!stopFlag.get()) {
Jedis jedis = pool.getResource();
jedis.set(sss, "aaasasdasdasdasdasdasdasdasdasdasdasdasdasaaaaaaaaaaaaaaaaaa" );
pool.returnResource(jedis);
counter.incrementAndGet();
}
}
}).start();
}
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
System.err.println("*** stop client ***");
stopFlag.set(true);
}
});
long startTime = System.currentTimeMillis();
while (!stopFlag.get()) {
Thread.sleep(1000);
final long count = counter.get();
long currentTime = System.currentTimeMillis();
long qps = count * 1000 / (currentTime - startTime);
System.out.println("qps=" + qps);
if ((currentTime - startTime) / 1000 > 10) {
counter.set(0);
startTime = currentTime;
System.out.println("reset counter");
}
}
}
}</span>
jedis操作redis,首先是創建一個連接池,當需要執行命令的時候,會重池子裏面拿jedis,jedis實現了redis所有命令,通過jedis可以輕鬆的操作redis。查看源碼發現一個jedis其實就是一個socket連接,通過創建socket來連接到服務器執行命令,jedis使用完之後應放回池子裏面。