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来排序。底层使用散列表和跳跃表来实现,所以读取中间部分的数据也很快

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

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

posted @ 2018-06-12 08:21  火爆泡菜  阅读(924)  评论(0编辑  收藏  举报