zoukankan      html  css  js  c++  java
  • Redis数据库2

    一.存储list
    1.概述
         list类型是按照插入顺序排序的字符串链表,可以在头部(left)和尾部(right)添加新的元素,如果不存在,则自动创建;如果list中所有元素被移除,则list也会消失;
         ArrayList:使用数组方式存储数据,有索引,所以查询快,增删慢(增删涉及到位移操作);
         LinkedList:为双向链表,每个元素都记录前后元素的指针,插入/删除时只更改前后元素的指针即可,速度较快,查询时需从头计算,速度较慢;
    2.常用命令
         2.1添加
         lpush list01 a #头部添加(left)
         rpush list01 b #尾部添加(right)
         2.2查看
         lrange list01 0 -1 #查看从第1个到倒数第1个元素之间的所有元素,即所有元素;
         lrange list01 0 -2 #查看从第1个到倒数第2个元素之间的所有元素;
         2.3弹出
         lpop list01 #弹出头部元素(left);
         rpop list01 #弹出尾部元素(right);
         2.4获取列表中元素个数
         llen list01
         2.5仅向存在的列表中添加元素,若列表不存在,则添加失败
         lpushx list01 c  #头部添加
         rpushx list01 d #尾部添加
         2.6删除
         lrem list01 2 a #删除list01中最左边的2个a元素;
         lrem list01 -2 a #删除list01中最右边的2个a元素;
         lrem list01 0 a #删除list01中所有的a元素;
         2.7修改
         lset list01 3 m #设置list01中索引为3的元素为m; 0代表头元素/1代表尾元素/索引不存在则抛出异常
         2.8插入
         linsert list01 before 2 1 #在list01中的2元素左边插入元素1;
         linsert list01 after 2 1 #在list01中的2元素右边插入元素1;
         2.9去尾添头
         rpoplpush list01  list02 #将list01中的尾部元素添加到list02的头部;


    二.存储set
    1.概述
         set为无序集合,不包含重复数据,可以在服务端完成集合的交/并/差的计算,效率极高.且进行增/删/判断是否存在时,时间复杂度为O(1);
    2.常用命令
         2.1添加
         sadd set01 a b c  #如果set01中已有a,则不会重复添加
         2.2删除
         srem set01 a #删除a元素
         2.3获取集合中的元素
         smembers set01 #获取set01中所有的key
         2.4判断集合中是否存在某元素
         sismember set01 a #判断set01中是否存在a元素,1表示存在,0表示元素不存在,或set01不存在
         2.5差集运算
         sdiff set01 set02 #返回除去二者共有元素后,set01中剩余的元素;
         sdiff set02 set01 #返回除去二者共有元素后,set02中剩余的元素;
         sdiffstore set03 set01 set02 #将返回的元素存储在set03中;
         2.6交集运算
         sinter set01 set02 #返回二者共有的元素;
         sinterstore set03 set01 set02 #将返回元素存储在set03中;
         2.7并集运算
         sunion set01 set02 #返回set01 set02中所有元素(重复元素只显示一次);
         sunionstore set03 set01 set02 #将并集运算结果存储在set03中
         2.8随机返回集合中的某一元素
         srandmember set01
         2.9获取集合中元素数量
         scard set01


    三.存储Sorted-set
    1.概述
    Sorted-set与set集合相似,都是字符串的集合,都不允许重复;区别为Sorted-set中的每个成员都关联一个分数(score),通过分数为元素排序;
    虽然元素唯一,但分数可重复;
    2.常用命令
    2.1添加
    zadd mysort 20 jack #向mysort的Sorted-set中添加jack元素(分数为20);
    zadd mysort 40 rose 50 smith #可同时添加多个;
    2.2获取某成员分数
    zscore mysort rose #返回字符串分数;
    2.3获取成员数量
    zcard mysort #返回成员个数,integer类型;
    zcount mysort 40 70 #获取分数在40-70之间的成员数量,返回integer
    2.4删除元素
    zrem mysort smith #移除smith
    zrem mysort smith  jack #移除smith
    zremrangebyrank mysort 1 3 #移除排名(从小到大)为1-3的元素
    zremrangebyscore mysort 0 60 #移除分数在0-60这间的元素
    2.5范围查询
    zrange mysort 0 -1 #返回从第一个到倒数第一个元素,即所有元素;
    zrange mysort 0 -1 with scores #返回从第一个到倒数第一个元素,且包含分数;
    zrevrange mysort 1 5 with scores #按照从大到小的顺序返回(包含两端元素);
    2.6返回指定个数的成员,并按从小到大的分数排序
    zrangebyscore mysort 90 100 withscores limit 3 5  #首先抽出90-100之间的元素按从小到大排序,再从索引为3的元素开始,取5个元素,并返回
    2.7修改分数
    zincrby mysort 5 jack #jack分数增加5
    2.8返回成员排名
    zrank mysort jack #返回成员在集合中的排名,integer,从小到大;
    zrevrank mysort jack #返回成员在集合中的排名,integer,从大到小;

    四.keys通用操作
    1.keys pattern :获取所有与pattern匹配的key
    keys *  # *表示一个或多个字符,此语句表示返回所有key;
    keys m? # ?用匹配一个字符,此语句返回m开头的且长度为2个字符的key;
    2.删除指定的key
    del mysort
    del list01
    3.判断key是否存在
    exists mysort #1代表存在,0代表不存在
    4.重命名
    rename mysort sort01  #把mysort重命名为sort01
    5.设置过期时间,以秒为单位
    expire mysort 100    #设置mysort的过期时间为100s
    6.获取剩余时间,若未设置,则返回-1
    ttl mysort
    7.获取key的类型(string/list/set/hash/zset),不存在返回none
    type mysort

    五.Jedis(以下代码在Eclipse中实现)
    1.导入jar包(commons-pool2-2.3/jedis-2.7)
    2.开启redis(./bin/redis-server ./redis.conf),并测试连接成功
    3.开启端口6379
         #防火墙打开3306端口
         /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
         #将打开的端口的访问规则保存在文件中
         /etc/rc.d/init.d/iptables save
    4.实现如下代码

      1 package jedisdemo;
      2  import org.junit.Test;
      3  import redis.clients.jedis.Jedis;
      4  import redis.clients.jedis.JedisPool;
      5  import redis.clients.jedis.JedisPoolConfig;
      6 
      7 public class jedisdemo {
      8      @Test
      9      public void test01() {
     10          // 构造jedis实例对象
     11         Jedis jedis = new Jedis("192.168.128.130", 6379);
     12          // 设置key-value
     13          jedis.set("name", "rose");
     14          // 根据key取value
     15          String name = jedis.get("name");
     16          System.out.println(name);
     17          // 释放资源
     18         jedis.close();
     19      }
     20 
     21     // 连接池方式
     22     @Test
     23      public void test02() {
     24          // 获取连接池,设置最大连接数,有效空闲连接
     25         JedisPoolConfig conf = new JedisPoolConfig();
     26          conf.setMaxTotal(100);
     27          conf.setMaxIdle(10);
     28          // 根据连接池配置创建一个jedis的连接池
     29         JedisPool pool = new JedisPool(conf, "192.168.128.130", 6379);
     30          // 获取连接池获取实例对象
     31         Jedis jedis = pool.getResource();
     32          jedis.set("age", "18");
     33          String age01 = jedis.get("age");
     34          System.out.println(age01);
     35          // 关闭资源
     36         jedis.close();
     37          pool.close();
     38 
     39     }
     40  }
     41 

  • 相关阅读:
    九章算术卷第二 粟米
    九章算术卷第一 方田
    九章算术卷第一 方田
    九章算术 原序
    软件开发活动
    软件开发活动
    趣味程序之数学之美系列
    I00019 生成全8数
    Sagheer and Nubian Market CodeForces
    Codeforces Round #533 (Div. 2) A. Salem and Sticks(暴力)
  • 原文地址:https://www.cnblogs.com/huguangqin/p/7348162.html
Copyright © 2011-2022 走看看