Redis学习

在这里插入图片描述

一、redis介绍

1.1什么是NoSQL

NoSQL,泛指非关系型的数据库,它可以作为关系型数据库的良好补充。
随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型数据库则由于其本身的特点得到了非常迅速的发展。
NoSQL数据库的产生就是为了解决: 大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题;

1.2NoSQL数据库的四大分类

(一)键值key-value存储数据库

相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
典型应用: 内容缓存,主要用于处理大量数据的高访问负载。
数据模型: 一系列键值对
优势: 快速查询
劣势: 存储的数据缺少结构化

(二)列存储数据库

相关产品:Cassandra, HBase, Riak
典型应用:分布式的文件系统
数据模型:以列簇式存储,将同一列数据存在一起
优势:查找速度快,可扩展性强,更容易进行分布式扩展
劣势:功能相对局限

(三)文档型数据库

相关产品:CouchDB、MongoDB
典型应用:Web应用(与Key-Value类似,Value是结构化的)
数据模型: 一系列键值对
优势:数据结构要求不严格
劣势: 查询性能不高,而且缺乏统一的查询语法

(二)图形Graph数据库

相关数据库:Neo4J、InfoGrid、Infinite Graph
典型应用:社交网络
数据模型:图结构
优势:利用图结构相关算法。
劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。

1.3什么是redis

redis是用C语言开发的一个开源的高性能键值对数据库,它通过提供多种键值数据类型类适应不同场景下的存储需求,Redis支持的简直数据类型如下:
字符串类型(string)、散列类型(hash)、列表类型(list)、集合类型(set)、有序集合类型(sortset)

1.4redis的应用场景

缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)

二、redis安装运行

2.1redis安装环境

redis是C语言开发,建议在linux上运行,本教程使用Centos7作为安装环境。
安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++

2.2redis安装

官网下载:
3.0
http://download.redis.io/releases/redis-3.0.0.tar.gz
4.0
http://download.redis.io/releases/redis-4.0.14.tar.gz
直接输入命令:
我的做法是,在/usr/local下mkdir tools文件,然后
①wget http://download.redis.io/releases/redis-3.0.4.tar.gz
②wget http://download.redis.io/releases/redis-4.0.14.tar.gz
 解压源码:
tar -zxvf redis-4.0.14.tar.gz
 进入解压后的目录进行编译
make
 安装到指定目录
make PREFIX=/usr/local/redis install

Linux tree命令用于以树状图列出目录的内容。

 配置redis.conf
在redis-4.0.14目录下
①cp redis.conf /usr/local/redis/bin
②进入/usr/local/redis/bin
③编辑vim redis.conf
注意: 设置redis可远程访问(3.0默认允许,4.0需要手动设置) ,修改绑定地址为0.0.0.0
vim redis.conf
bing 0.0.0.0

在这里插入图片描述
在这里插入图片描述
Redis3.0新增的redis-sentinel是redis集群管理工具可实现高可用。

2.3redis启动

2.3.1前端模式启动

/usr/local/redis/bin目录下输入./redis-server redis.conf
在这里插入图片描述

2.3.2后端模式启动

修改redis.conf配置文件, daemonize yes 以后端模式启动。
在这里插入图片描述

2.3.3启动多个redis进程

(一)启动多个redis进程意义:
一个redis代表一个redis服务(服务器)。

(二)方法1:
启动时指定端口可在一台服务器启动多个redis进程。
cd /usr/local/redis/bin
./redis-server ./redis.conf --port 6380

(三)方法2(推荐此方法):
创建多个redis目录,以端口号命名,比如:创建6379、6380两个目录,将redis的安装文件bin和conf中文件拷贝至这两个目录。
修改6379目录下的redis.conf设置端口号为6379
修改6380目录下的redis.conf设置端口号为6380
启动6379和6380目录下的redis-server程序:
cd 6379
./redis-server . /redis.conf
cd 6380
./redis-server . /redis.conf

(四)查看redis的进程
在这里插入图片描述

2.3.4redis停止

强行终止Redis进程可能会导致redis持久化数据丢失。正确停止Redis的方式应该是向Redis服务发送SHUTDOWN命令,方法为:

cd /usr/local/redis/bin
./redis-cli shutdown save
连接本机6379端口的redis服务执行shutdown 停止
save:在停止redis服务之前将所有的数据持久化保存。

停止6380的redis,执行:
cd /usr/local/redis/bin
./redis-cli -p 6380 shutdown save

2.3.5 连接redis服务端

执行bin/redis-cli连接redis服务端:
在这里插入图片描述
从上图得知redis-cli默认连接本机的redis,本机的redis没有启动则报上图中的错误。
指定连接redis服务的ip和端口
在这里插入图片描述

2.3.6 向redis服务端发送命令

redis-cli连上redis服务后,可以在命令行发送命令
ping
Redis提供了PING命令来测试客户端与Redis的连接是否正常,如果连接正常会收到回复PONG
在这里插入图片描述
 set/get
使用set和get可以向redis设置数据、获取数据。
在这里插入图片描述

2.3.7 使用cmder连接

(一)连接
在这里插入图片描述
(二)连接失败
在这里插入图片描述
(三)解决方案
在这里插入图片描述

2.4 redis多数据库

2.4.1 redis实例

一个redis进程就是一个redis实例,一台服务器可以同时有多个redis实例,不同的redis实例提供不同的服务端口对外提供服务,每个redis实例之间互相影响。每个redis实例都包括自己的数据库,数据库中可以存储自己的数据。

2.4.2 多数据库测试

一个Redis实例可以包括多个数据库,客户端可以指定连接某个redis实例的哪个数据库,就好比一个mysql中创建多个数据库,客户端连接时指定连接哪个数据库。
一个redis实例最多可提供16个数据库,下标从0到15,客户端默认连接第0号数据库,也可以通过select选择连接哪个数据库,如下连接1号库:
=建议:不同的应用系统要使用不同的redis实例而不是使用同一个redis实例下的不同数据库。=

三、jedis

3.1 jedis介绍

Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如java、C、C#、C++、php、Node.js、Go等。
在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis、等其中官方推荐使用Jedis和Redisson。 在企业中用的最多的就是Jedis,下面我们就重点学习下Jedis。
Jedis同样也是托管在github上,地址:https://github.com/xetorthio/jedis

3.2通过 jedis 连接 redis 单机

3.2.1jar包

pom坐标:

redis.clients
jedis
2.9.0

3.2.2单实例连接
	Jedis jedis = new Jedis("192.168.0.209", 6379);
	jedis.set("name", "bar");
	String name = jedis.get("name");
	System.out.println(name);
	jedis.close();
3.2.3使用连接池连接

通过单实例连接redis不能对redis连接进行共享,可以使用连接池对redis连接进行共享,提高资源利用率,使用jedisPool连接redis服务,如下代码:

@Test
public void pool() {
	JedisPoolConfig config = new JedisPoolConfig();
	//最大连接数
	config.setMaxTotal(30);
	//最大连接空闲数
	config.setMaxIdle(2);
	
	JedisPool pool = new JedisPool(config, "192.168.0.209", 6379);
	Jedis jedis = null;

	try  {
		jedis = pool.getResource();
		
		jedis.set("name", "lisi");
		String name = jedis.get("name");
		System.out.println(name);
	}catch(Exception ex){
		ex.printStackTrace();
	}finally{
		if(jedis != null){
			//关闭连接
			jedis.close();
		}
	}
	
}

四、数据类型–string

4.1redis string 介绍

redis中没有使用C语言的字符串表示,而是自定义一个数据结构叫SDS(simple dynamic string)即简单动态字符串。

4.2命令

4.2.1 赋值与取值

127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> get test
"123“
当键不存在时返回空结果。

4.2.2 向尾部追加值

APPEND key value
APPENDS的作用是向键值的末尾追加value。如果键不存在则将该键的值设置为value,即相当于SET key value、返回值是追加后字符串的总长度。
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> append str " world!"
(integer) 12
127.0.0.1:6379> get str
“hello world!”

4.2.3 获取字符串长度

STRLEN key
STRLEN命令返回键值的长度,如果键不存在则返回0。
127.0.0.1:6379> strlen str
(integer) 0
127.0.0.1:6379> set str hello
OK
127.0.0.1:6379> strlen str
(integer) 5

4.2.4 同时设置/获取多个键值

MSET key value [key value …]
MGET key [key …]
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> get k1
“v1”
127.0.0.1:6379> mget k1 k3

  1. “v1”
  2. “v3”

五、数据类型–hash

5.1 需求

使用 redis存储用户信息,考虑使用string或其它方案。
{“birthday”:1557743055507,“ename”:“zhangsan”,“districtId”:2,“sex”:1,“id”:1,“edate”:1557743055507,“age”:18,“sal”:8000.0}

5.2 使用string的问题

假设有User对象以JSON序列化的形式存储到Redis中,User对象有id,username、password、age、name等属性,存储的过程如下:
保存、更新:
User对象 à json(string) à redis
如果在业务上只是更新age属性,其他的属性并不做更新我应该怎么做呢? 如果仍然采用上边的方法在传输、处理时会造成资源浪费,下边讲的hash可以很好的解决这个问题。

5.3 redis hash介绍

hash叫散列类型,它提供了字段和字段值的映射。字段值只能是字符串类型,不支持散列类型、集合类型等其它类型。如下:
在这里插入图片描述

5.4 redis hash命令

5.4.1赋值与取值

HSET key field value 一次只能设置一个字段值
HGET key field 一次只能获取一个字段值
HMSET key field value[field value …] 一次可以设置多个字段值
HMGET key field[field …] 一次可以获取多个字段值
HGETALL key
HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0.

5.4.2判断字段是否存在

HEXISTS key field
127.0.0.1:6379> hexists user age 查看user中是否有age字段
(integer) 1
127.0.0.1:6379> hexists user name 查看user中是否有name字段
(integer) 0

HSETNX key field value
当字段不存在时赋值,类似HSET,区别在于如果字段已经存在,该命令不执行任何操作。
127.0.0.1:6379> hsetnx user age 30 如果user中没有age字段则设置age值为30,否则不做任何操作
(integer) 0

5.4.3删除字段

可以删除一个或多个字段,返回值是被删除的字段个数
HDEL key field [field …]
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hdel user age name
(integer) 0
127.0.0.1:6379> hdel user age username
(integer) 1

5.4.4只获取字段名或字段值

HKEYS key
HVALS key
127.0.0.1:6379> hmset user age 20 name lisi
OK
127.0.0.1:6379> hkeys user

  1. “age”
  2. “name”
    127.0.0.1:6379> hvals user
  3. “20”
  4. “lisi”
5.4.5获取字段数量

HLEN key
127.0.0.1:6379> hlen user
(integer) 2

六、数据类型list

列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。
列表类型内部是使用双向链表实现的,所以向列表两端添加元素的时间复杂度为o(1),获取越接近两端的元素速度就越快,这意味着即使是一个有几千万个元素的列表,获取头部或尾部的10条记录也是极快的。

6.1命令

6.1.1向列表两端增加元素

LPUSH key value [value …]
RPUSH key value [value …]
向列表左边增加元素
127.0.0.1:6379> lpush list:1 1 2 3
(integer) 3
向列表右边增加元素
127.0.0.1:6379> rpush list:1 4 5 6
(integer) 3

6.1.2从列表两端弹出元素

LPOP key
RPOP key
LPOP命令从列表左边弹出一个元素,会分两步完成,第一步是将列表左边的元素从列表中移除,第二步是返回被移除的元素值。
127.0.0.1:6379> lpop list:1
"3“
127.0.0.1:6379> rpop list:1
"6“

6.1.3 获取列表中元素的个数

LLEN key
127.0.0.1:6379> llen list:1
(integer) 2

6.1.4 获取列表片段

LRANGE key start stop
LRANGE命令是列表类型最常用的命令之一,获取列表中的某一片段,将返回start、stop之间的所有元素(包含两端的元素),索引从0开始。索引可以是负数,如:“-1”代表最后边的一个元素。
127.0.0.1:6379> lrange list:1 0 2

  1. “2”
  2. “1”
  3. “4”
6.1.5 其他命令

 删除列表中指定的值
LREM key count value
LREM命令会删除列表中前count个值为value的元素,返回实际删除的元素个数。根据count值的不同,该命令的执行方式会有所不同:
 当count>0时, LREM会从列表左边开始删除。
 当count<0时, LREM会从列表后边开始删除。
 当count=0时, LREM删除所有值为value的元素。

 获得/设置指定索引的元素值
LINDEX key index
LSET key index value
127.0.0.1:6379> lindex l:list 2
“1”
127.0.0.1:6379> lset l:list 2 2
OK
127.0.0.1:6379> lrange l:list 0 -1

  1. “6”
  2. “5”
  3. “2”
  4. “2”

 只保留列表指定片段,指定范围和LRANGE一致
LTRIM key start stop
127.0.0.1:6379> lrange l:list 0 -1

  1. “6”
  2. “5”
  3. “0”
  4. “2”
    127.0.0.1:6379> ltrim l:list 0 2
    OK
    127.0.0.1:6379> lrange l:list 0 -1
  5. “6”
  6. “5”
  7. “0”

 向列表中插入元素
LINSERT key BEFORE|AFTER pivot value
该命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是BEFORE还是AFTER来决定将value插入到该元素的前面还是后面。
127.0.0.1:6379> lrange list 0 -1

  1. “3”
  2. “2”
  3. “1”
    127.0.0.1:6379> linsert list after 3 4
    (integer) 4
    127.0.0.1:6379> lrange list 0 -1
  4. “3”
  5. “4”
  6. “2”
  7. “1”

 将元素从一个列表转移到另一个列表中
RPOPLPUSH source destination
127.0.0.1:6379> rpoplpush list newlist
“1”
127.0.0.1:6379> lrange newlist 0 -1

  1. “1”
    127.0.0.1:6379> lrange list 0 -1
  2. “3”
  3. “4”
  4. “2”
6.1.6 Jedis常用操作
public static void testList() {  
        System.out.println("==List==");  
        Jedis jedis = RedisUtil.getJedis();  
        try {  
            // 开始前,先移除所有的内容  
            jedis.del("messages");  
            jedis.rpush("messages", "Hello how are you?");  
            jedis.rpush("messages", "Fine thanks. I'm having fun with redis.");  
            jedis.rpush("messages", "I should look into this NOSQL thing ASAP");  
  
            // 再取出所有数据jedis.lrange是按范围取出,  
            // 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有  
            List<String> values = jedis.lrange("messages", 0, -1);  
            System.out.println(values);  
  
	        // 清空数据  
	        System.out.println(jedis.flushDB());  
	        // 添加数据  
	        jedis.lpush("lists", "vector");  
	        jedis.lpush("lists", "ArrayList");  
	        jedis.lpush("lists", "LinkedList");  
	        // 数组长度  
	        System.out.println(jedis.llen("lists"));  
	        // 排序  
	        //System.out.println(jedis.sort("lists"));  
	        // 字串  
	        System.out.println(jedis.lrange("lists", 0, 3));  
	        // 修改列表中单个值  
	        jedis.lset("lists", 0, "hello list!");  
	        // 获取列表指定下标的值  
	        System.out.println(jedis.lindex("lists", 1));  
	        // 删除列表指定下标的值  
	        System.out.println(jedis.lrem("lists", 1, "vector"));  
	        // 删除区间以外的数据  
	        System.out.println(jedis.ltrim("lists", 0, 1));  
	        // 列表出栈  
	        System.out.println(jedis.lpop("lists"));  
	        // 整个列表值  
	        System.out.println(jedis.lrange("lists", 0, -1));  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            RedisUtil.getPool().returnResource(jedis);  
        }  
    }  

七、数据类型–set

7.1redis set介绍

在集合中的每个元素都有不同的,且没有顺序。
在这里插入图片描述
集合类型的常用操作是向集合中加入或删除元素、判断某个元素是否存在等,由于集合类型的redis内部是使用值为空的散列表实现,所有这些操作的实际复杂度都喂o(1)。
redis还提供了多个集合之间的交集、并集、差集的运算。

7.2命令

7.2.1增加/删除元素

SADD key member [member …]
SREM key member [member …]
127.0.0.1:6379> sadd set a b c
(integer) 3
127.0.0.1:6379> sadd set a
(integer) 0
127.0.0.1:6379> srem set c d
(integer) 1

7.2.2获得集合中的所有元素

SMEMBERS key
127.0.0.1:6379> smembers set

  1. “b”
  2. "a”
    判断元素是否在集合中,无论集合中有多少元素都可以极速的返回结果。
    SISMEMBER key member
    127.0.0.1:6379> sismember set a
    (integer) 1
    127.0.0.1:6379> sismember set h
    (integer) 0

8、数据类型–sorted set

8.1 redis sorted set介绍

在集合类型的基础上有序集合类型中的每个元素都关联一个分数,这使得我们不仅可以完成插入、删除和判断元素是否存在集合中,还能获得分数最高或最低的前N个元素、获取指定分数范围内的元素等与分数有关的操作。
在某些方面有序集合和列表类型有些相似:
(1)二者都是有序的;(2)二者都可以获得某一范围的元素;
但是,二者有着很大区别:
1、列表类型是通过列表实现的,获取靠近两端的数据速度极快,而当元素增多后,访问中间数据的速度就会变慢。
2、有序集合类型使用散列实现,所有即使读取位于中间部分的数据也很快。
3、列表中不能简单的调整某个元素的位置,但是有序集合可以(通过更改分数实现)
4、有序集合要比列表类型更耗内存

8.2命令
8.2.1增加元素

向有序集合中加入一个元素和该元素的分数,如果该元素已经存在则会用新的分数替换原有的分数。返回值是新加入到集合中的元素的个数,不包含之前已经存在的元素
ZADD key score member [score member …]
127.0.0.1:6379> zadd scoreboard 80 zhangsan 89 lisi 94 wangwu
(integer) 3
127.0.0.1:6379> zadd scoreboard 97 lisi
(integer) 0
获取元素的分数
ZSCORE key member
127.0.0.1:6379> zscore scoreboard lisi
“97”

8.2.2获得排名在某个范围的元素列表

获得排名在某个范围的元素列表
ZRANGE key start stop [WITHSCORES] 照元素分数从小到大的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

127.0.0.1:6379> zrange scoreboard 0 2

  1. “zhangsan”
  2. “wangwu”
  3. "lisi“

ZREVRANGE key start stop [WITHSCORES] 照元素分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)

127.0.0.1:6379> zrevrange scoreboard 0 2

  1. " lisi "
  2. “wangwu”
  3. " zhangsan “

如果需要获得元素的分数的可以在命令尾部加上WITHSCORES参数
127.0.0.1:6379> zrange scoreboard 0 1 WITHSCORES

  1. “zhangsan”
  2. “80”
  3. “wangwu”
  4. “94”
8.2.3获取指定分数范围的元素

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
127.0.0.1:6379> ZRANGEBYSCORE scoreboard 90 97 WITHSCORES

  1. “wangwu”
  2. “94”
  3. “lisi”
  4. “97”
    127.0.0.1:6379> ZRANGEBYSCORE scoreboard 90 (97 WITHSCORES
  5. “wangwu”
  6. "94“
    127.0.0.1:6379> ZRANGEBYSCORE scoreboard 70 100 limit 1 2
  7. “wangwu”
  8. “lisi”
8.2.4增加某个元素的分数,返回值是更改后的分数

ZINCRBY key increment member
给lisi加4分
127.0.0.1:6379> ZINCRBY scoreboard 4 lisi
"101“
获得集合中元素的数量
ZCARD key
127.0.0.1:6379> ZCARD scoreboard
(integer) 3
获得指定分数范围内的元素个数
ZCOUNT key min max
127.0.0.1:6379> ZCOUNT scoreboard 80 90
(integer) 1

8.3 其它命令

 按照排名范围删除元素
ZREMRANGEBYRANK key start stop
127.0.0.1:6379> ZREMRANGEBYRANK scoreboard 0 1
(integer) 2
127.0.0.1:6379> ZRANGE scoreboard 0 -1

  1. “lisi”
    ZREMRANGEBYSCORE key min max
    按照分数范围删除元素
    127.0.0.1:6379> zadd scoreboard 84 zhangsan
    (integer) 1
    127.0.0.1:6379> ZREMRANGEBYSCORE scoreboard 80 100
    (integer) 1

 获取元素的排名
ZRANK key member
ZREVRANK key member
从小到大
127.0.0.1:6379> ZRANK scoreboard lisi
(integer) 0
从大到小
127.0.0.1:6379> ZREVRANK scoreboard zhangsan
(integer) 1

8.4 keys命令
8.4.1设置key的生存时间

Redis在实际使用过程中更多的用作暖存,然而缓存的数据一般都是需要设置生存时间的,即:到期后数据销毁
EXPIRE key seconds 设置key的生存时间(单位:秒)key在多少秒后会自动删除

8.5 其它命令

(1)keys 返回满足给定pattern的所有key
redis 127.0.0.1:6379> keys mylist*

  1. “mylist”
  2. “mylist5”
  3. “mylist6”
  4. “mylist7”
  5. “mylist8”

(2)exists 确认一个key是否存在
redis 127.0.0.1:6379> exists HongWan
(integer) 0
redis 127.0.0.1:6379> exists age
(integer) 1
redis 127.0.0.1:6379>
从结果来数据库中不存在HongWan 这个key,但是age 这个key 是存在的

(3)del 删除一个key
redis 127.0.0.1:6379> del age
(integer) 1
redis 127.0.0.1:6379> exists age
(integer) 0
redis 127.0.0.1:6379>

(4)rename 重命名key
redis 127.0.0.1:6379[1]> keys *

  1. “age”
    redis 127.0.0.1:6379[1]> rename age age_new
    OK
    redis 127.0.0.1:6379[1]> keys *
  2. “age_new”
    redis 127.0.0.1:6379[1]>
    age 成功的被我们改名为age_new 了

(5)type返回值的类型
redis 127.0.0.1:6379> type addr
string
redis 127.0.0.1:6379> type myzset2
zset
redis 127.0.0.1:6379> type mylist
list
redis 127.0.0.1:6379>

11、服务器命令

(一)ping 测试连接是否存活

redis 127.0.0.1:6379> ping
PONG
//执行下面命令之前,我们停止redis 服务器
redis 127.0.0.1:6379> ping
Could not connect to Redis at 127.0.0.1:6379: Connection refused
//执行下面命令之前,我们启动redis 服务器
not connected> ping
PONG
redis 127.0.0.1:6379>
第一个ping 时,说明此连接正常
第二个ping 之前,我们将redis 服务器停止,那么ping 是失败的
第三个ping 之前,我们将redis 服务器启动,那么ping 是成功的

(二)echo 在命令行打印一些内容

redis 127.0.0.1:6379> echo HongWan
“HongWan”
redis 127.0.0.1:6379>

(三)select选择数据库

Redis 数据库编号从0~15,我们可以选择任意一个数据库来进行数据的存取。
redis 127.0.0.1:6379> select 1
OK
redis 127.0.0.1:6379[1]> select 16
(error) ERR invalid DB index
redis 127.0.0.1:6379[16]>
当选择16 时,报错,说明没有编号为16 的这个数据库

(四)quit 退出连接

redis 127.0.0.1:6379> quit

(五)dbsize 返回当前数据库中key的数目

redis 127.0.0.1:6379> dbsize
(integer) 18
redis 127.0.0.1:6379>
结果说明此库中有18 个key

(六)info获取服务器的信息和统计

redis 127.0.0.1:6379> info
redis_version:2.2.12
redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:32
multiplexing_api:epoll
process_id:28480
uptime_in_seconds:2515
uptime_in_days:0

(七)flushdb删除当前选择数据库中的所有key

redis 127.0.0.1:6379> dbsize
(integer) 18
redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379> dbsize
(integer) 0
redis 127.0.0.1:6379>
在本例中我们将0 号数据库中的key 都清除了

(八)flushall 删除所有数据库中的所有key

redis 127.0.0.1:6379[1]> dbsize
(integer) 1
redis 127.0.0.1:6379[1]> select 0
OK
redis 127.0.0.1:6379> flushall
OK
redis 127.0.0.1:6379> select 1
OK
redis 127.0.0.1:6379[1]> dbsize
(integer) 0
redis 127.0.0.1:6379[1]>
在本例中我们先查看了一个1 号数据库中有一个key,然后我切换到0 号库执行flushall 命令,结果1 号库中的key 也被清除了,说是此命令工作正常。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java亮小白1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值