zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    centos7下mysql双主+keepalived
    Nginx 性能优化有这篇就够了!
    mysql对自增主键ID进行重新排序
    nginx 配置文件 2019-12-20
    zabbix服务端接收的数据类型,便于编写脚本向服务端提交数据
    zabbix自动注册,实现自动添加机器,减少人工干预
    zabbix企业微信告警配置教程
    websocket 连接测试端口服务是否正常代码
    mongodb Sort排序能够支持的最大内存限制为32M Plan executor error during find: FAILURE
    rabbitmq 的安装配置使用
  • 原文地址:https://www.cnblogs.com/huhongy/p/6438332.html
Copyright © 2011-2022 走看看