2.redis基礎開發

   初學者可能對於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使用完之後應放回池子裏面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章