redis命令及對應jedis操做(一)-String類型

咱們知道學習編程知識,先要搭建環境,首先須要下載redis工具包,下載時須要注意,redis的偶數版是表示穩定版(2.4,2.6等),奇數版表示非穩定版(2.5,2.7等),我下載的是2.6的,最新版本,我之前使用的是2.0版本的,發現好多命令不能使用,你們仍是下載最新的穩定版比較好。java

1、環境搭建:redis

      一、下載redis的壓縮包,http://www.redis.io/(redis官網),下載好後解壓下,而後配置環境變量,將redis-cli和redis-server所在地址配置在path中便可,由於是入門,咱們只須要壓縮包中的兩個應用程序redis-cli.exe和redis-server.exe,打開redis-server.exe,這個就是redis服務器,服務器開啓後是以下界面: 數據庫

打開redis客戶端可使用兩種方式編程

一、打開cmd,輸入命令:redis-cli -h 127.0.0.1,點擊enter就能夠了,而後輸入ping命令測試,返回pong表示鏈接服務成功服務器

二、直接打開redis-cli.exe,測試是否鏈接成功方式同上; 如圖:app


接下來就可使用redis命令了,redis中包含五中類型,(string,list,set,sortedset,hash)這票博客中只描述String類型,也是redis中最簡單的類型:dom

========工具

一、字符串類型是redis中最基本的數據類型,能夠存儲任何形式的字符串,包括二進制數據,一個字符串類型健容許存儲的最大容量是512M,字符串是其餘幾種數據類型的基礎,只是對字符串的組織形式不同罷了,好比列表是以列表的形式組織的字符串,集合是以集合的形式組織的字符串。學習

二、經常使用的字符串命令:測試

set key value:給key賦值

get key :取出key對應的值

incr key :給key的值加1,若是key對應的值是字符串,會報錯(ERR value is not an integer or out of range),返回的是增長後的值,若key不存在,則默認key對應的值由0開始增長,至關於建立了set key 0

incrby key num:給key對應的值增長num,num爲指定增長的數值

decr key:與incr key相反

decrby key num:與incrby key num相反

mset k1 v1 k2 v2 k3 v3:同時給k1,k2,k3賦值

mget k1 k2 k3:同時取出k1,k2,k3的值

下面是上面的命令在redis命令端的結果:

redis 127.0.0.1:6379> set name jack
OK
redis 127.0.0.1:6379> get name
"jack"
redis 127.0.0.1:6379> incr num
(integer) 1
redis 127.0.0.1:6379> incr num
(integer) 2
redis 127.0.0.1:6379> get num
"2"
redis 127.0.0.1:6379> incrby num 5
(integer) 7
redis 127.0.0.1:6379> get num
"7"
redis 127.0.0.1:6379> decr num
(integer) 6
redis 127.0.0.1:6379> get num
"6"
redis 127.0.0.1:6379> mset stu1 zhangsan stu2 lisi stu3 wangwu
OK
redis 127.0.0.1:6379> mget stu1 stu2 stu3
1) "zhangsan"
2) "lisi"
3) "wangwu"

固然,redis針對string類型的命令還有不少,我就不所有在命令端敲出來了,能夠貼出來給你們看看:

刪除redis:del name                             返回刪除key數量
測試指定key是否存在:exists name       1-存在,0-不存在
type key:返回key 的類型;string,list,hash,set,sortedset
keyspattern:匹配key,好比keys n*   ->name
randomkey:隨機返回庫中 的一個key
raname oldkey newkey  重命名key,若是key存在,覆蓋
renamenx oldkey newkey  重命名key,若是key存在,返回失敗
dbsize 返回key的數量
expire key seconds :爲能夠設置過時時間,單位秒,返回1表成功,0表示已經設置過或者key不存在
ttl key  返回設置過過時時間的 key的剩餘過時秒數  -1 表示 key不存在或者沒有設置過過時時間
select db-index 經過索引選擇數據庫,默認鏈接的數據庫全部是0,默認數據庫數是 16個。返回1 表
示成功,0 失敗 
move key db-index   將 key從當前數據庫移動到指定數據庫。返回1 成功。0 若是key不存在,或
者已經在指定數據庫中 
flushdb  刪除當前數據庫中全部 key,此方法不會失敗。慎用 
flushall  刪除全部數據庫中的全部key,此方法不會失敗。更加慎用
append key value 給指定key的字符串值追加 value,返回新字符串值的長度。 
substr key start end  返回截取過的 key的字符串值,注意並不修改 key的值,下標是從 0 開始的。

根據須要本身來使用響應的命令便可。

redis也支持不少的程序語言,發展速度很快,我這邊示例java程序對redis的操做,也只貼出對string類型的操做:我使用的jedis的jar包是jedis-2.1.0.jar,固然程序中還須要別的jar包,你們能夠根據我程序中import中的內容去網上下載

package org.laoyao.redisTest;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import redis.clients.jedis.SortingParams;

public class RedisTest {
    private Jedis jedis;// 非切片額客戶端鏈接
    private JedisPool jedisPool;// 非切片鏈接池
    private ShardedJedis shardedJedis;// 切片額客戶端鏈接
    private ShardedJedisPool shardedJedisPool;// 切片鏈接池

    public RedisTest() {
        initialPool();
        initialShardedPool();
        shardedJedis = shardedJedisPool.getResource();
        jedis = jedisPool.getResource();

    }

    /**
     * 初始化非切片池
     */
    private void initialPool() {
        // 池基本配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxActive(20);
        config.setMaxIdle(5);
        config.setMaxWait(1000l);
        config.setTestOnBorrow(false);

        jedisPool = new JedisPool(config, "127.0.0.1", 6379);
    }
    /**
     * 初始化切片池
     */
    private void initialShardedPool() {
        // 池基本配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxActive(20);
        config.setMaxIdle(5);
        config.setMaxWait(1000l);
        config.setTestOnBorrow(false);
        // slave連接
        List shards = new ArrayList();
        shards.add(new JedisShardInfo("10.22.19.167", 6379, "master"));

        // 構造池
        shardedJedisPool = new ShardedJedisPool(config, shards);
    }
    private void StringOperate() {
        System.out.println("======================String_1==========================");
        // 清空數據
        System.out.println("清空庫中全部數據:" + jedis.flushDB());

        System.out.println("=============增=============");
        jedis.set("key001", "value001");
        jedis.set("key002", "value002");
        jedis.set("key003", "value003");
        System.out.println("已新增的3個鍵值對以下:");
        System.out.println(jedis.get("key001"));
        System.out.println(jedis.get("key002"));
        System.out.println(jedis.get("key003"));

        System.out.println("=============刪=============");
        System.out.println("刪除key003鍵值對:" + jedis.del("key003"));
        System.out.println("獲取key003鍵對應的值:" + jedis.get("key003"));

        System.out.println("=============改=============");
        // 一、直接覆蓋原來的數據
        System.out.println("直接覆蓋key001原來的數據:" + jedis.set("key001", "value001-update"));
        System.out.println("獲取key001對應的新值:" + jedis.get("key001"));
        // 二、直接覆蓋原來的數據
        System.out.println("在key002原來值後面追加:" + jedis.append("key002", "+appendString"));
        System.out.println("獲取key002對應的新值" + jedis.get("key002"));

        System.out.println("=============增,刪,查(多個)=============");
        /**
         * mset,mget同時新增,修改,查詢多個鍵值對 等價於: jedis.set("name","ssss"); jedis.set("jarorwar","xxxx");
         */
        System.out.println("一次性新增key201,key202,key203,key204及其對應值:"
                + jedis.mset("key201", "value201", "key202", "value202", "key203", "value203", "key204", "value204"));
        System.out.println("一次性獲取key201,key202,key203,key204各自對應的值:"
                + jedis.mget("key201", "key202", "key203", "key204"));
        System.out.println("一次性刪除key201,key202:" + jedis.del(new String[] { "key201", "key202" }));
        System.out.println("一次性獲取key201,key202,key203,key204各自對應的值:"
                + jedis.mget("key201", "key202", "key203", "key204"));
        System.out.println();

        // jedis具有的功能shardedJedis中也可直接使用,下面測試一些前面沒用過的方法
        System.out.println("======================String_2==========================");
        // 清空數據
        System.out.println("清空庫中全部數據:" + jedis.flushDB());

        System.out.println("=============新增鍵值對時防止覆蓋原先值=============");
        System.out.println("原先key301不存在時,新增key301:" + shardedJedis.setnx("key301", "value301"));
        System.out.println("原先key302不存在時,新增key302:" + shardedJedis.setnx("key302", "value302"));
        System.out.println("當key302存在時,嘗試新增key302:" + shardedJedis.setnx("key302", "value302_new"));
        System.out.println("獲取key301對應的值:" + shardedJedis.get("key301"));
        System.out.println("獲取key302對應的值:" + shardedJedis.get("key302"));

        System.out.println("=============超過有效期鍵值對被刪除=============");
        // 設置key的有效期,並存儲數據
        System.out.println("新增key303,並指定過時時間爲2秒" + shardedJedis.setex("key303", 2, "key303-2second"));
        System.out.println("獲取key303對應的值:" + shardedJedis.get("key303"));
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
        }
        System.out.println("3秒以後,獲取key303對應的值:" + shardedJedis.get("key303"));

        System.out.println("=============獲取原值,更新爲新值一步完成=============");
        System.out.println("key302原值:" + shardedJedis.getSet("key302", "value302-after-getset"));
        System.out.println("key302新值:" + shardedJedis.get("key302"));

        System.out.println("=============獲取子串=============");
        System.out.println("獲取key302對應值中的子串:" + shardedJedis.getrange("key302", 5, 7));
    }

    
    public static void main(String[] args) {
        new RedisTest().StringOperate();
    }
}

下面貼出運行結果:

======================String_1==========================
清空庫中全部數據:OK
=============增=============
已新增的3個鍵值對以下:
value001
value002
value003
=============刪=============
刪除key003鍵值對:1
獲取key003鍵對應的值:null
=============改=============
直接覆蓋key001原來的數據:OK
獲取key001對應的新值:value001-update
在key002原來值後面追加:21
獲取key002對應的新值value002+appendString
=============增,刪,查(多個)=============
一次性新增key201,key202,key203,key204及其對應值:OK
一次性獲取key201,key202,key203,key204各自對應的值:[value201, value202, value203, value204]
一次性刪除key201,key202:2
一次性獲取key201,key202,key203,key204各自對應的值:[null, null, value203, value204]

======================String_2==========================
清空庫中全部數據:OK
=============新增鍵值對時防止覆蓋原先值=============
原先key301不存在時,新增key301:1
原先key302不存在時,新增key302:1
當key302存在時,嘗試新增key302:0
獲取key301對應的值:value301
獲取key302對應的值:value302
=============超過有效期鍵值對被刪除=============
新增key303,並指定過時時間爲2秒OK
獲取key303對應的值:key303-2second
3秒以後,獲取key303對應的值:null
=============獲取原值,更新爲新值一步完成=============
key302原值:value302
key302新值:value302-after-getset
=============獲取子串=============
獲取key302對應值中的子串:302

總結:redis對string類型的操做是很是簡單的,redis原本就是一個簡單的東西,string類型是其他各類類型的基礎,其他各類類型(list、set、sortedset、hash)最終保存的依然是string類型的值,今天就寫這麼多,剛開始學習,算是學習筆記吧,寫的很差,還請多多包涵指正!

相關文章
相關標籤/搜索