zoukankan      html  css  js  c++  java
  • 2、Redis的基础知识

     写在前面的话:读书破万卷,编码如有神
    --------------------------------------------------------------------
    主要内容包括:
    • redis单进程
    • redis多数据库
    • redis的key的操作
    • redis的value五种类型
    --------------------------------------------------------------------

    1、redis单进程                                                                    

      Redis的服务器程序采用的是单进程的模型来处理客户端的请求。对读写等事件的响应是通过对epoll函数的包装来做到的。

      Redis的实际处理速度完全依赖主进程的执行效率,假如同时有多个客户端并发访问服务器,则服务器处理能力在一定情况下将会下降。假如要提升服务器的并发能力,那么可以采用在单台机器上部署多个redis进程的方式。

    --------------------------------------------------------------------     

    2、redis多数据库                                                                 

    (1)Redis每个数据库对外都是0开始递增的数字来命名,默认16个数据库,默认使用0号数据库,可以使用 select+数字 来选择数据库

     在目录/usr/local/bin下执行命令: ./redis-cli 连接到当前的redis,然后就可以用select命令来切换数据库了

    (2)可以使用命令:Dbsize 查看当前数据库的key的数量

    (3)可以使用命令:move key 目的数据库编号,在多个数据库间移动数据

    (4)可以使用命令:flushdb,清除某个数据库的数据

    (5)Redis不支持自定义数据库名字,默认是: 0、1、2、3、4 ... 15

    (6)Redis不支持为每个数据库设置不同的访问密码

    (7)多个数据库之间并不是完全独立的,可以使用命令:FlushAll,清空redis全部的数据

    --------------------------------------------------------------------

    3、redis的key的操作                                                            

    (1)Redis的key只能是字符串类型

    (2)对Redis的keys的常用操作命令

        2.1、keys:获取符合规则的键名列表

          格式是keys pattern, pattern支持glob风格通配符格式:

            ?  匹配一个字符

            *   匹配任意字符

            []      匹配中括号内的任一字符,可以用 - 来表示范围

            x     匹配字符x,用于转义符号

                      

        2.2、exists:判断键值是否存在,格式是:exists key

                         

        2.3、del: 删除key,格式是:del key

                         

        2.4、type: 获取键值的数据类型,格式是:type key

                          

        2.5、rename:改名,格式是: rename oldKey newKey

                         

        2.6、renamenx: 如果不存在则改名,格式是:renamex oldKey newKey,(这里不存在是指,newKey不存在)

                         

    用java代码来示例上面的命令操作:

     1 import redis.clients.jedis.Jedis;
     2 
     3 import java.util.Set;
     4 
     5 /**
     6  * redis的key操作示例
     7  */
     8 public class RedisKeyOperate {
     9     public static void main(String[] args) {
    10         Jedis jedis = new Jedis("127.0.0.1",6379);
    11 
    12         /**
    13          * 示例1: 相当于执行 keys *
    14          */
    15         Set<String> keys = jedis.keys("*");
    16         keys.stream().forEach(System.out::println);
    17 
    18         System.out.println("======================");
    19 
    20         /**
    21          * 示例2:  相当于执行  keys k?
    22          */
    23         Set<String> keys1 = jedis.keys("k?");
    24         keys1.stream().forEach(System.out::println);
    25 
    26         System.out.println("======================");
    27 
    28         /**
    29          * 示例3: 相当于执行  exists k1
    30          */
    31         Boolean existsKey = jedis.exists("k1");
    32         System.out.println("existsKey = " + existsKey);
    33 
    34         System.out.println("======================");
    35 
    36         /**
    37          * 示例4: 相当于执行 del k1
    38          */
    39         Long delK1 = jedis.del("k1");
    40         System.out.println("delK1 = " + delK1);
    41 
    42         System.out.println("======================");
    43 
    44         /**
    45          * 示例5: 相当于执行 type k2
    46          */
    47         String typeK2 = jedis.type("k2");
    48         System.out.println("typek2 = " + typeK2);
    49 
    50         System.out.println("======================");
    51 
    52 
    53         /**
    54          * 示例6: 相当于执行 rename k2 k22
    55          */
    56         String renameK2 = jedis.rename("k2", "k22");
    57         System.out.println("renameK2 = " + renameK2);
    58         System.out.println("======================");
    59 
    60         /**
    61          * 示例7: 相当于执行 renamenx t1 t11
    62          */
    63         Long renamenxt1 = jedis.renamenx("t1", "t11");
    64         System.out.println("renamenxt1 = "+renamenxt1);
    65     }
    66 }

    --------------------------------------------------------------------

    4、redis的value五种类型                                                       

    • String:字符串,可以存在String、Integer、Float型的数据,甚至是二进制数据,一个字符串最大容量是512M
    • List: 字符串List,底层实现上不是数组,而是链表,也就是说头部和尾部插入一个新元素,其时间复杂度是常数级别的;其弊端是:元素的定位比数组慢。
    • Set: 字符串Set,无序不可重复,是通过HashTable实现的
    • Hash: 按Hash方式来存放字符串
    • ZSet: 字符串set,有序且不可重复,根据Score来排序。底层使用散列表和跳跃表来实现,所以读取中间部分的数据也很快

    --------------------------------------------------------------------

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

  • 相关阅读:
    UWP开发必备:常用数据列表控件汇总比较
    CodeForces 372 A. Counting Kangaroos is Fun
    ubuntu 13.10 eclipse 菜单栏不可用的问题
    Codeforces Round #219(Div. 2)373 B. Making Sequences is Fun(二分+找规律)
    Git/Github使用方法小记
    Ubuntu 下jdk的安装
    VIM简明教程
    codeforces 371 C-Hamburgers
    codeforces 371A K-Periodic Array
    计算机网络中IP地址和MAC地址
  • 原文地址:https://www.cnblogs.com/xinhuaxuan/p/9171275.html
Copyright © 2011-2022 走看看