redis介紹(1)命令介紹


redis 的五大基本類型的簡單命令

對key--value中的value的一些簡單命令

    keys * 查詢redis中的所有key
    exists key 查詢key是否存在
    flushdb 清空當前庫
    flushall 清空所有庫 總共16個庫,默認0號庫
    select(庫號0-15) 選擇庫
    dbsize 返回當前庫中有多少key
    randomkey 隨機返回一個key
    ttl 獲得一個key還剩下多少時間
    expire 設置一個key的有效時間
    move(key,dbindex) 把當前key轉移到制定庫
    del key 刪除一個key
    type key[hhy]      返回當前key的類型【五種】
    rename[了解]

  


持久化

  • save:將數據同步保存到磁盤
  • bgsave:將數據異步保存到磁盤
  • lastsave:返回上次成功將數據保存到磁盤的Unix時戳
  • shundown:將數據同步保存到磁盤,然后關閉服務


遠程服務控制

  • info:提供服務器的信息和統計
  • monitor:實時轉儲收到的請求
  • slaveof:改變復制策略設置
  • config:在運行時配置Redis服務器




對String操作的命令

  • set(key, value):給數據庫中名稱為key的string賦予值value
  • get(key):返回數據庫中名稱為key的string的value
  • getset(key, value):給名稱為key的string賦予上一次的value
  • mget(key1, key2,…, key N):返回庫中多個string的value
  • setnx(key, value):添加string,名稱為key,值為value
  • setex(key, time, value):向庫中添加string,設定過期時間time
  • mset(key N, value N):批量設置多個string的值
  • msetnx(key N, value N):如果所有名稱為key i的string都不存在
  • incr(key):名稱為key的string增1操作
  • incrby(key, integer):名稱為key的string增加integer
  • decr(key):名稱為key的string減1操作
  • decrby(key, integer):名稱為key的string減少integer
  • append(key, value):名稱為key的string的值附加value
  • substr(key, start, end):返回名稱為key的string的value的子串


對List操作的命令

  • rpush(key, value):在名稱為key的list尾添加一個值為value的元素
  • lpush(key, value):在名稱為key的list頭添加一個值為value的 元素
  • llen(key):返回名稱為key的list的長度
  • lrange(key, start, end):返回名稱為key的list中start至end之間的元素
  • ltrim(key, start, end):截取名稱為key的list
  • lindex(key, index):返回名稱為key的list中index位置的元素
  • lset(key, index, value):給名稱為key的list中index位置的元素賦值
  • lrem(key, count, value):刪除count個key的list中值為value的元素
  • lpop(key):返回並刪除名稱為key的list中的首元素
  • rpop(key):返回並刪除名稱為key的list中的尾元素
  • blpop(key1, key2,… key N, timeout):lpop命令的block版本。
  • brpop(key1, key2,… key N, timeout):rpop的block版本。
  • rpoplpush(srckey, dstkey):返回並刪除名稱為srckey的list的尾元素,並將該元素添加到名稱為dstkey的list的頭部


對Set操作的命令

  • sadd(key, member):向名稱為key的set中添加元素member
  • srem(key, member) :刪除名稱為key的set中的元素member
  • spop(key) :隨機返回並刪除名稱為key的set中一個元素
  • smove(srckey, dstkey, member) :移到集合元素
  • scard(key) :返回名稱為key的set的基數
  • sismember(key, member) :member是否是名稱為key的set的元素
  • sinter(key1, key2,…key N) :求交集
  • sinterstore(dstkey, (keys)) :求交集並將交集保存到dstkey的集合
  • sunion(key1, (keys)) :求並集
  • sunionstore(dstkey, (keys)) :求並集並將並集保存到dstkey的集合
  • sdiff(key1, (keys)) :求差集
  • sdiffstore(dstkey, (keys)) :求差集並將差集保存到dstkey的集合
  • smembers(key) :返回名稱為key的set的所有元素
  • srandmember(key) :隨機返回名稱為key的set的一個元素

 

Sorted-sort【zset】集合  

 

     zset 是sets 一個升級 ,是有序集合,這一屬性在添加修改元素的時候可以指定,
    每次指定后,zset 會自動沖洗按心的值調整順序,可以理解為兩列的mysql表
    一兩存value,一列存順序,key理解為zset名字
    zadd 向集合中添加一個元素 如果值存在則更新順序號
    zadd myset 1 one
    zadd myset 2 two
    zadd myset 3 three

    2 zrange
    zrange myset 0 -1 withscores withscores顯示 順序號

    3 zrem 刪除一個元素
    zrem myset two

    4 zincrby 對序號進行增加
     zincrby myset 3 one 順序號增加3個
       zincrby myset -3 one 順序號減少3個

    5 zrank 按照索引排序 ,返回索引值

    zrank myset one

    6 zrevrank 返回名稱為key 的zset 中member 元素的排名
      (按照score從大到小的排序)即下標
      zrevrank myset two

    7 zrevrange 降序排序


    8 zrangebyscore
    

    zrangebyscore myset 2 3 withscores
    這里的2 和3 是順序 不是inex

    9 zcount
    返回score在給定區間的數量
    zcount myset 2 4

    10 zcard 返回所有元素個數
    zcard myset

    11 zremrangebyrank 刪除集合中排名在給定區間的元素
    按照索引刪除
    zremrangebyrank myset 1 1
    1 代表索引

    12 zremrangebyscore 按照順序刪除

    zremrangebyscore myset 2 5

 

對Hash操作的命令

Hash是一種數據結構,一般翻譯做“散列”,也有直接音譯為“哈希”。Redis hash 是一個string類型的field和value的映射表。它特別適合用於存儲對象。同將對象的每個字段存成單個string類型,存儲為hash類型會占用更少的內存,並且方便的存取整個對象。

  • hset(key, field, value):向名稱為key的hash中添加元素field
  • hget(key, field):返回名稱為key的hash中field對應的value
  • hmget(key, (fields)):返回名稱為key的hash中field i對應的value
  • hmset(key, (fields)):向名稱為key的hash中添加元素field 
  • hincrby(key, field, integer):將名稱為key的hash中field的value增加integer
  • hexists(key, field):名稱為key的hash中是否存在鍵為field的域
  • hdel(key, field):刪除名稱為key的hash中鍵為field的域
  • hlen(key):返回名稱為key的hash中元素個數
  • hkeys(key):返回名稱為key的hash中所有鍵
  • hvals(key):返回名稱為key的hash中所有鍵對應的value
  • hgetall(key):返回名稱為key的hash中所有的鍵(field)及其對應的value

 

 

代碼實例:redis的CURD操作

 

  1 package deifeng.testRedis;
  2 
  3 import java.util.HashMap;
  4 import java.util.List;
  5 import java.util.Set;
  6 
  7 import org.junit.Test;
  8 
  9 import redis.clients.jedis.BinaryClient.LIST_POSITION;
 10 import redis.clients.jedis.Jedis;
 11 import redis.clients.jedis.Tuple;
 12 
 13 /**
 14  * 
 15  * @author Administrator
 16  * timer:2017年2月18日下午11:02:24
 17  * intro:TODO
 18  */
 19 public class TestCRUD {
 20     //創建redis 的客戶端連接,綁定主機和端口號
 21     private static String host="127.0.0.1";
 22     private static int port =6379;
 23     private Jedis jedis = TestCRUD.getRedisUtil(host, port);
 24     
 25     
 26     
 27     //測試連接
 28     public void  testConn(){
 29         System.out.println(jedis);
 30     }
 31     
 32     /**
 33      * 測試redis的五大基本類型操作
 34      */
 35     /**
 36      * String 類型的簡單命令
 37      * 
 38      *    一 -------多
 39      *    set      mset
 40      */
 41     @Test
 42     public  void testString(){
 43         //獲取jedis對象    返回key=hhy2的type類型
 44         /*String type = jedis.type("hhy2");
 45         System.out.println(type);*/
 46         /**
 47          * 存儲一個數據
 48          * 
 49          * set   -------mset
 50          */
 51         //jedis.flushDB();       flushAll
 52         String key1 = jedis.set("hhy", "hhy"); 
 53         System.out.println(jedis.get("hhy"));
 54         //是在key不存在,才會執行set操作,如果key存在,則此操作無效,返回值1代表成功,0代表失敗
 55         //setnx  ------msetnx
 56         Long setnx = jedis.setnx("hhy1", "zs");
 57         System.out.println(setnx);//1   代表插入的key在redis庫中不存在
 58         //setex  ---- mstex
 59         jedis.setex("hhy", 100, "zsq");//100有效期   
 60         
 61         Long tt = jedis.ttl("hhy");
 62         System.out.println(tt);
 63         /**
 64          * 存儲多個數據
 65          * mget  key1 value1  key2 value2...
 66          * 類似於set對一個數據存儲的語法
 67          */
 68         
 69         
 70         /**
 71          * getrange
 72          * getrange key star end
 73          *
 74          *    解釋:獲取存儲在key中value的字串。字符串的截取有star和end決定,字符串的第一個字符編號是0,第二個是1,
 75          *    一次類推;如果是負數,-1是最后一個字符,-2是倒數第二個字符,一次類推。
 76          *
 77          *    setrange
 78          *  用value重寫key值的一部分,偏移量由offset指定
 79          *  
 80          */
 81         
 82         jedis.set("test", "test123456");
 83         System.out.println(jedis.getrange("test", 2, 5));
 84         
 85         
 86         /**
 87          * getset
 88          */
 89         String getset = jedis.getSet("hhy", "123");
 90         System.out.println(getset);
 91         
 92         Long ll = jedis.append("hhy", "123");//添加以后的長度
 93         
 94         
 95         /**
 96          * 遞增/減
 97          * incr / incrby   ++   /  decr  /decrby  --
 98          */
 99         Long incr = jedis.incr("21");
100         System.out.println(incr);
101         
102         /**
103          * 刪除key
104          * del
105          */
106         jedis.del("hhy");
107         System.out.println("=====================");
108         Set<String> keys = jedis.keys("*");
109         for (String string : keys) {
110             System.out.println(string +"---->"+jedis.get(string));
111         }
112         
113     }
114     
115     
116     
117     /**
118      * redis  ---- List
119      * lpush  rpush  linsert  添加命令
120      * lpop   rpop            刪除命令
121      * lrange llen   lindex   查詢命令
122      * lset                   修改命令
123      * rpoplpush              兩個列表A,B,將A列表的尾元素添加到B列表的頭元素中
124      */
125     @Test
126     public void testList(){
127         jedis.flushDB();//清空當前庫
128         //添加一個list集合
129         /**
130          * 如果保證順序
131          * left  降序
132          * right  順序
133          */
134         jedis.lpush("zs", "3","2","1");//左側插入一個list集合
135         jedis.rpush("li", "7","8","9");
136         /*
137         //遍歷li集合
138         List<String> list = jedis.lrange("li", 0, -1);
139         for (String str : list) {
140             System.out.println(str);
141         }
142         
143         System.out.println("============");
144         //linsert插入一條數據
145         jedis.linsert("zs", LIST_POSITION.AFTER, "2", "12");
146         //遍歷li集合
147         List<String> zs = jedis.lrange("zs", 0, -1);
148         for (String str : zs) {
149             System.out.println(str);
150         }
151         
152         //del
153         *//**
154          * lpop  rpop  分別代表是從左|右側刪除一條數據
155          * 並且把刪除的數據值返回過來
156          *//*
157         System.out.println(jedis.lpop("zs"));
158         
159         
160         *//**
161          * 查詢命令  lindex  llen
162          *//*
163         
164         System.out.println(jedis.lindex("li", 1));
165         System.out.println(jedis.lset("zs", 0, "hhy"));
166         
167         */
168         jedis.rpoplpush("li", "zs");
169         System.out.println("--------------");
170         List<String> zs1 = jedis.lrange("zs", 0, -1);
171         for (String string : zs1) {
172             System.out.println(string);
173         }
174     }
175     
176     
177     
178     /**
179      * Redis   --   Set
180      */
181     @Test
182     public void testSet(){
183         jedis.flushDB();
184         jedis.sadd("ss", "1","2","3");
185         System.out.println(jedis.smembers("ss"));
186         //在客戶端命令中。存在是1  不存在是0
187         System.out.println(jedis.sismember("ss", "2"));
188         //set集合 的大小
189         System.out.println(jedis.scard("ss"));
190         //返回set集合中隨機數據
191         System.out.println(jedis.srandmember("ss"));
192         //隨即返回redis  中的key
193         System.out.println(jedis.randomKey());
194         
195         /**
196          * spop隨機刪除set集合的一個數據
197          * 集合之間的 操作
198          * 
199          * sinter   交集
200          * sunion   並集
201          * sdiff    差集
202          * smove    把  1  集合轉移到 2中
203          * >smove youSet mySet 4  ---將youSet中的數據4移除的同時將數據4添加到mySet中
204          */
205         jedis.sinter("可擴展的key,求交集");
206         jedis.sunion("可擴展的key,求並集");
207         jedis.sdiff("可擴展的key,求差集");
208         
209     }
210     
211     /**
212      * sorted-sort
213      * 
214      * zadd 一次只能添加一個
215      */
216     @Test
217     public void testSortedSort(){
218         jedis.flushDB();
219         jedis.zadd("hhy", 100, "zs");
220         jedis.zadd("hhy", 101, "zs1");
221         jedis.zadd("hhy", 102, "zs2");
222         jedis.zadd("hhy", 103, "zs3");
223         //獲取zset集合中的值  ---  是一個集合   asc
224         /**zrange       asc
225          * zrevrange    desc
226          */
227         Set<String> set = jedis.zrange("hhy", 0, -1);
228         for (String str : set) {
229             //獲取分數
230             System.out.println(str);
231             //通過這個集合中的值,查詢每一個值所對應的分數
232             Double zscore = jedis.zscore("hhy", str);
233             System.out.println(zscore);
234         }
235         //可以直接獲取到值--分數的對應關系,封裝到tuple對象中
236         Set<Tuple> set2 = jedis.zrangeWithScores("hhy", 0, -1);
237         for (Tuple tuple : set2) {
238             System.out.println(tuple.getScore()+" --->"+tuple.getElement());
239         }
240         //查看zset集合中的數據zs1是第一名
241         Long zrank = jedis.zrank("hhy", "zs1");
242         System.out.println(zrank);
243     }
244     
245     /**
246      * hash類型的操作
247      * 基本命令的操作
248      */
249     @Test
250     public void testHash(){
251         /**
252          * 如何在user中再存一個對象?
253          */
254         jedis.hset("user", "name", "hhy");
255         jedis.hset("user", "age", "25");
256         //jedis.hmset("u", new HashMap<String,String>());
257         System.out.println(jedis.hget("user", "name"));
258         //查詢hash中的所有filed和value
259         jedis.hkeys("user");
260         jedis.hvals("user");
261         //s設置多個值和獲取多個值  hmset   hmget
262         
263         
264         //獲取所有的filed
265         jedis.hgetAll("user");
266         //當前有多少數據
267         jedis.hlen("user");
268     }
269     
270     /**
271      * 創建redis的連接對象
272      * @param host  主機
273      * @param port  端口號
274      * @return  jedis對象
275      */
276     public static Jedis getRedisUtil(String host,int port){
277         return new Jedis(host,port);
278     }
279     
280     
281 }

 

hash實現簡單購物車

package deifeng.testRedis;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import redis.clients.jedis.Jedis;

/**
 * 
 * @author Administrator
 * timer:2017年2月21日上午9:54:33
 * intro:使用hash類型模擬購物車的實現
 */
public class ShoppingGoods {
    //定義主機和端口號
    private static String host = "127.0.0.1";
    private static int port = 6379;
    //hash的那個key的名字
    private static String hash_name = "huhy";
    

    public static void main(String[] args) {
        //客戶端連接redis
        Jedis jedis = new Jedis(host, port);
        
        Map<String, String> hash_goods = new HashMap<String, String>();
        //添加到hash類型中數據
        hash_goods.put("電視", "3");
        hash_goods.put("書", "4");
        hash_goods.put("大風車", "6");
        hash_goods.put("衣服", "10");
        
        jedis.hmset(hash_name, hash_goods);
        
        //當前有多少數據
        //System.out.println(jedis.hlen(hash_name)+"個數據");
        
        //遍歷數據
        List<String> list = new ArrayList<String>();
        
        Set<String> sets = jedis.hkeys(hash_name);//查詢key中出所有的fileds
        Iterator<String> fileds = sets.iterator();
        while(fileds.hasNext()){
            //System.out.println(fileds.next().toString());
            //通過filed找到對應的value
            String filed = fileds.next();
            String value = jedis.hget(hash_name, filed);
            System.out.println(filed+"------->"+value);
            
            //把查詢出的filed存儲到list集合中
            list.add(filed);
        }
        
        //llist集合中保存的是數據的filed
        /**
         * 通過hmget的可以取多個值
         * hmget(key   filed )  ----> value
         */
         List<String> ll = jedis.hmget(hash_name, list.get(0), list.get(1), list.get(2),list.get(3));  
         System.out.print(ll +" ");  
        
         //hgetall命令  
         Map<String, String> map = jedis.hgetAll(hash_name);  
         Set<Entry<String, String>> ss = map.entrySet();
         Iterator<Entry<String, String>> ii = ss.iterator();
         for (Entry<String, String> entry : ss) {
            System.out.println(entry.getKey() +"--->"+entry.getValue());
         }
         //切斷客戶端連接   釋放資源
         
         jedis.disconnect();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM