目录
一,缓存的概念
1,引入缓存
2,缓存保存的位置及分层结构
1,DNS缓存
2,应用层缓存
3,数据层缓存
4,硬件缓存
二,Redis基础
1,关系型数据库与非关系型数据库(NOSQL)
1,关系型数据库
2,非关系型数据库
3,关系型数据库与非关系型数据库的区别
4,非关系型数据库产生的背景
2,Redis简介
3,Redis与memcached对比
三,Redis安装
四,Redis命令相关
五,数据库常用的命令
REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
Redis是一个开源(BSD许可),内存中的数据结构存储,用作数据库、缓存和消息代理。
缓存的概念
缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据,而且硬盘也有大小不一的缓存,甚至是物理服务器的raid 卡有也缓存,都是为了起到加速CPU 访问硬盘数据的目的,因为CPU的速度太快了,CPU需要的数据由于硬盘往往不能在短时间内满足CPU的需求,因此CPU缓存、内存、Raid 卡缓存以及硬盘缓存就在一定程度上满足了CPU的数据需求,即CPU 从缓存读取数据可以大幅提高CPU的工作效率
系统缓存中的buffer与cache
buffer:缓冲也叫写缓冲,一般用于写操作,可以将数据先写入内存再写入磁盘,buffer 一般用于写缓冲,用于解决不同介质的速度不一致的缓冲,先将数据临时写入到里自己最近的地方,以提高写入速度,CPU会把数据先写到内存的磁盘缓冲区,然后就认为数据已经写入完成看,然后由内核在后续的时间在写入磁盘,所以服务器突然断电会丢失内存中的部分数据。
cache:缓存也叫读缓存,一般用于读操作,CPU读文件从内存读,如果内存没有就先从硬盘读到内存再读到CPU,将需要频繁读取的数据放在里自己最近的缓存区域,下次读取的时候即可快速读取。
互联网应用领域,提到缓存为王
用户层: 浏览器DNS缓存,应用程序DNS缓存,操作系统DNS缓存客户端
代理层: CDN,反向代理缓存
Web层: Web服务器缓存
应用层: 页面静态化
数据层: 分布式缓存,数据库
系统层: 操作系统cache
物理层: 磁盘cache, Raid Cache
浏览器的DNS缓存默认为60秒,即60秒之内在访问同一个域名就不在进行DNS解析
Nginx、PHP等web服务可以设置应用缓存以加速响应用户请求,另外有些解释性语言,比如:
PHP/Python/Java不能直接运行,需要先编译成字节码,但字节码需要解释器解释为机器码之后才能执
行,因此字节码也是一种缓存,有时候还会出现程序代码上线后字节码没有更新的现象。所以一般上线
新版前,需要先将应用缓存清理,再上线新版。
另外可以利用动态页面静态化技术,加速访问,比如:将访问数据库的数据的动态页面,提前用程序生成静态
页面文件html 电商网站的商品介绍,评论信息非实时数据等皆可利用此技术实现。
分布式缓存服务
Redis
Memcached
数据库
MySQL 查询缓存
innodb缓存、MYISAM缓存
CPU缓存(L1的数据缓存和L1的指令缓存)、二级缓存、三级缓存
磁盘缓存:Disk Cache
磁盘阵列缓存: Raid Cache,可使用电池防止断电丢失数据
关系型数据库是一个结构化的数据库,创建在关系模型 (二维表格模型) 基础上,一般面向于记录。 SQL语句 (标准数据查询语言) 就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。 主流的关系型数据库包括Oracle、MySQL、SQL Server、Microsoft Access、DB2等。
NoSQL (NoSQL=NotOnlySQL),意思是“不仅仅是SQL”,是非关系型数据库的总称。 除了主流的关系型数据库外的数据库,都认为是非关系型。 主流的 NoSQL 数据库有Redis、 MongBD、 Hbase、 Memcached 等。
NoSQL 数据库,全称为 Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键值存储(memcached、Redis)、永久性键值存储(ROMA、Redis)、面向文档的数据库(MongoDB、CouchDB)、面向列的数据库(Cassandra、HBase),每种 NoSQL 都有其特有的使用场景及优点。
Oracle,mysql 等传统的关系数据库非常成熟并且已大规模商用,为什么还要用 NoSQL 数据库呢?
主要是由于随着互联网发展,数据量越来越大,对性能要求越来越高,传统数据库存在着先天性的缺陷,即单机(单库)性能瓶颈,并且扩展困难。这样既有单机单库瓶颈,却又扩展困难,自然无法满足日益增长的海量数据存储及其性能要求,所以才会出现了各种不同的 NoSQL 产品,NoSQL 根本性的优势在于在云计算时代,简单、易于大规模分布式扩展,并且读写性能非常高。
(1)、数据存储方式不同
关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。 与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。
① 关系型:依赖于关系模型E-R图,同时以表格式的方式存储数据
② 非关系型:除了以表格形式存储之外,通常会以大块的形式组合在一起进行存储数据
(2)、扩展方式不同
SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。 要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。 而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器 (节点) 来分担负载。
① 关系:纵向(天然表格式)
② 非关:横向(天然分布式)
(3)、对事务性的支持不同
如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。 虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。
① 关系型:特别适合高事务性要求和需要控制执行计划的任务
② 非关系:此处会稍显弱势,其价值点在于高扩展性和大数据量处理方面
可用于应对Web2.0纯动态网站类型的三高问题。
(1) High performance-------对数据库高并发读写需求
(2) HugeStorage--------------对海量数据高效存储与访问需求
(3) High Scalability && High Availability------- 对数据库高可扩展性与高可用性需求
关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给Web2.0的数据库发展带来新的思路。让关系数据库关注在关系上,非关系型数据库关注在存储上。例如,在读写分离的MySQL数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度。 Mysql 高热数据——》redis web ——》redis ——》mysql CPU——》内存/缓存 ——》磁盘
总结:
关系型数据库: 实例–>数据库–>表(table)–>记录行(row)、数据字段(column)——》存储数据
非关系型数据库: 实例–>数据库–>集合(collection) -->键值对(key-value)
Redis (Remote Dictionary Server)在2009年发布,开发者Salvatore Sanfilippo是意大利开发者,他本想为自己的公司开发一个用于替换MySQL的产品Redis,但是没有想到他把Redis开源后大受欢迎,短短几年,Redis就有了很大的用户群体,目前国内外使用的公司众多,比如:阿里,百度,新浪微博,知乎网,GitHub,Twitter 等。Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-valuedatabase),是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能的还有memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久性等功能
Redis特性
速度快: 10W QPS,基于内存,C语言实现
单线程
持久化
支持多种数据结构
支持多种编程语言
功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能
简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单
主从复制
支持高可用和分布式
单线程的优点:
纯内存
非阻塞
避免线程切换和竞态消耗
Redis的典型应用场景
Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享
缓存:数据查询、电商网站商品信息、新闻内容
计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景
微博/微信社交场合:共同好友,粉丝数,关注,点赞评论等
消息队列:ELK的日志缓存、部分业务的订阅发布系统
地理位置: 基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能
支持数据的持久化:可以将内存中的数据保持在磁盘中,重启redis服务或者服务器之后可以从备份文件中恢复数据到内存继续使用
支持更多的数据类型:支持string(字符串)、hash(哈希数据)、list(列表)、set(集合)、zset(有序集合)
支持数据的备份:可以实现类似于数据的master-slave模式的数据备份,另外也支持使用快照+AOF
支持更大的value数据:memcache单个key value最大只支持1MB,而redis最大支持512MB(生产不建议超过2M,性能受影响)
在Redis6版本前,Redis 是单线程,而memcached是多线程,所以单机情况下没有memcached 并发高,性能更好,但redis 支持分布式集群以实现更高的并发,单Redis实例可以实现数万并发
支持集群横向扩展:基于redis cluster的横向扩展,可以实现分布式集群,大幅提升性能和数据安全性
都是基于 C 语言开发
memcached redis 类型 key-value key-value 过期策略 支持 支持 数据类型 单一数据类型 五大数据类型 持久化 不支持 支持 主从复制 不支持 支持 虚拟内存 不支持 支持
1,关闭防火墙和selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
2,进入指定目录将安装包放入
[root@localhost opt]# cd /opt
[root@localhost opt]# ls
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# ls
redis-5.0.7.tar.gz
3,安装环境依赖包
[root@localhost opt]# yum install -y gcc gcc-c++ make
已加载插件:fastestmirror, langpacks
centos | 3.6 kB 00:00
Determining fastest mirrors
软件包 gcc-4.8.5-16.el7.x86_64 已安装并且是最新版本
软件包 gcc-c++-4.8.5-16.el7.x86_64 已安装并且是最新版本
软件包 1:make-3.82-23.el7.x86_64 已安装并且是最新版本
无须任何处理
4,解压编译安装
由于Redis源码包中直接提供了Makefile 文件,所以在解压完软件包后,不用先执行./configure 进行配置,可直接执行make与make install命令进行安装
[root@localhost opt]# tar zxf redis-5.0.7.tar.gz
[root@localhost opt]# cd redis-5.0.7/
[root@localhost redis-5.0.7]# make
cd src && make all
make[1]: 进入目录“/opt/redis-5.0.7/src”
CC Makefile.dep
make[1]: 离开目录“/opt/redis-5.0.7/src”
...........
INSTALL redis-check-rdb
INSTALL redis-check-aof
Hint: It's a good idea to run 'make test' ;)
make[1]: 离开目录“/opt/redis-5.0.7/src”
[root@localhost redis-5.0.7]#
[root@localhost redis-5.0.7]# make PREFIX=/usr/local/redis install ##指定目录
cd src && make install
make[1]: 进入目录“/opt/redis-5.0.7/src”
CC Makefile.dep
make[1]: 离开目录“/opt/redis-5.0.7/src”
make[1]: 进入目录“/opt/redis-5.0.7/src”
Hint: It's a good idea to run 'make test' ;)
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: 离开目录“/opt/redis-5.0.7/src”
[root@localhost redis-5.0.7]# cd /opt/redis-5.0.7/utils
[root@localhost utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] ##回车
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] ##回车
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] ##回车
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] ##回车
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
###手动输入路径
..........
Successfully added to runlevels 345!
Starting Redis server...
Installation successful! ##完成
上文各字段含义:
Selected config:
Port : 6379 #默认侦听端口为6379
Config file : /etc/redis/6379.conf #配置文件路径
Log file : /var/log/redis_6379.log #日志文件路径
Data dir : /var/lib/ redis/6379 #数据文件路径
Executable : /usr/local/redis/bin/redis-server #可执行文件路径
Cli Executable : /usr/local/redis/bin/redis-cli #客户端命令工具
查看开启
[root@localhost utils]# ss -natp|grep redis
LISTEN 0 128 127.0.0.1:6379 *:*
users:(("redis-server",pid=79032,fd=6))
修改配置文件70行改为自己的ip
[root@localhost utils]# vim /etc/redis/6379.conf
70 bind 127.0.0.1 192.168.18.100
71
重启服务查看
[root@localhost utils]# /etc/init.d/redis_6379 restart ##重启服务
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...
[root@localhost utils]# ss -natp |grep redis ##查看
LISTEN 0 128 192.168.18.100:6379 *:*
users:(("redis-server",pid=79130,fd=7))
LISTEN 0 128 127.0.0.1:6379 *:*
users:(("redis-server",pid=79130,fd=6))
把redis的可执行程序文件放入路径环境变量的目录中便于系统识别
[root@localhost utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/
------Redis命令工具----------
redis-server:
#用于启动 Redis 的工具
redis-benchmark:
#用于检测 Redis 在本机的运行效率
redis-check-aof:
#修复 AOF 持久化文件
redis-check-rdb:
#修复 RDB 持久化文件
redis-cli:
#是 Redis 命令行工具
---redis-cli 命令行工具------
语法:
redis-cli -h host -p port -a password -n 数据序号(0-15)
-h:指定远程主机
-p:指定redis服务端口
-a:指定密码,未设置数据库密码可以省略-a选项
-n:指定数据序号 库默认是0号库redis有16个库(0-15)
若不添加任何选型表示,则使用127.0.0.1:6379 连接本机上的redis 数据库
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379
192.168.18.100:6379> quit ##指定ip和端口号
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379 -n 10
192.168.18.100:6379[10]> quit ##指定数据库号
[root@localhost utils]# redis-cli ##不指定默认127.0.0.1:6379
127.0.0.1:6379>
---------redis-benchmark-------
redis-benchmark 测试工具
redis-benchmark 是官方自带的 Redis 性能测试工具, 可以有效的测试 Redis 服务的性
能。 基本的测试语法为
redis-benchmark [选项] [选项值]
-h: 指定服务器主机名。
-p: 指定服务器端口。
-s: 指定服务器 socket。
-c: 指定并发连接数。
-n: 指定请求数。
-d: 以字节的形式指定 SET/GET 值的数据大小。
-k: 1=keep alive 0=reconnect 。
-r: SET/GET/INCR 使用随机 key, SADD 使用随机值。
-P: 通过管道传输请求。
-q: 强制退出 redis。 仅显示 query/sec 值。
--csv: 以 CSV 格式输出。
-l: 生成循环, 永久执行测试。
-t: 仅运行以逗号分隔的测试命令列表。
-I: Idle 模式。 仅打开 N 个 idle 连接并等待。
[root@localhost utils]# redis-benchmark -h 192.168.18.100 -p 6379 -c 100 -n 100000
命令即可向 IP 地址为 192.168.18.100、 端口为 6379 的 Redis 服务器发送
100 个并发连接与 100000 个请求测试性能。
====== PING_INLINE ======
100000 requests completed in 0.47 seconds
100 parallel clients
3 bytes payload
keep alive: 1
..........
====== MSET (10 keys) ======
100000 requests completed in 0.41 seconds
100 parallel clients
3 bytes payload
keep alive: 1
99.99% <= 1 milliseconds
100.00% <= 1 milliseconds
242130.77 requests per second
[root@localhost utils]# redis-benchmark -h 192.168.18.100 -p 6379 -q -d 100
测试存取大小为 100 字节的数据包的性能
PING_INLINE: 244498.77 requests per second
PING_BULK: 238095.25 requests per second
SET: 240384.61 requests per second
GET: 236406.61 requests per second
INCR: 238663.48 requests per second
LPUSH: 248756.22 requests per second
RPUSH: 247524.75 requests per second
LPOP: 244498.77 requests per second
RPOP: 240963.86 requests per second
SADD: 238095.25 requests per second
HSET: 242130.77 requests per second
SPOP: 233644.86 requests per second
LPUSH (needed to benchmark LRANGE): 248138.95 requests per second
LRANGE_100 (first 100 elements): 99800.40 requests per second
LRANGE_300 (first 300 elements): 40683.48 requests per second
LRANGE_500 (first 450 elements): 28304.56 requests per second
LRANGE_600 (first 600 elements): 21413.28 requests per second
MSET (10 keys): 211416.50 requests per second
[root@localhost utils]# redis-benchmark -t set,lpush -n 1000 -q
命令的作用是测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能。
SET: 249999.98 requests per second
LPUSH: 249999.98 requests per second
登录数据库:redis-cli
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379
192.168.18.100:6379> quit ##指定ip和端口号
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379 -n 10
192.168.18.100:6379[10]> quit ##指定数据库号
[root@localhost utils]# redis-cli ##不指定默认127.0.0.1:6379
127.0.0.1:6379>
设置键和值
set
get
192.168.18.100:6379> set students yangguo ##创建键和值
OK
192.168.18.100:6379> get students ##查看键值
"yangguo"
192.168.18.100:6379>
192.168.18.100:6379> set k1 22
OK
192.168.18.100:6379> get k1
"22"
192.168.18.100:6379> set k1 ll ##用set可以直接重新赋值
OK
192.168.18.100:6379> get k1
"ll"
-keys
使用 keys 命令可以取符合规则的键值列表, 通常情况可以结合*、 ? 等选项来使用
192.168.18.100:6379> keys * ##查看所有键
1) "students"
2) "mylist"
3) "counter:__rand_int__"
4) "myset:__rand_int__"
5) "key:__rand_int__"
192.168.18.100:6379> keys s* ##查看以s开头的键
1) "students"
192.168.18.100:6379> keys m?s* ##查看m开头与s之间有一个字符的键
1) "myset:__rand_int__"
--exists
exists 命令可以判断键值是否存在。
192.168.18.100:6379> exists s1 ##不存在返回0
(integer) 0
192.168.18.100:6379> exists k1 ##存在返回1
(integer) 1
192.168.18.100:6379>
--type
使用 type 命令可以获取 key 对应的 value 值类型
192.168.18.100:6379> type k2
string
192.168.18.100:6379> type students
string
---rename
rename 源 key 目标 key
rename 命令是对已有 key 进行重命名, 其命令格式为: rename 源 key 目标 key。 使用
rename 命令进行重命名时, 无论目标 key 是否存在都进行重命名, 且源 key 的值会覆盖目
标 key 的值。 在实际使用过程中, 建议先用 exists 命令查看目标 key 是否存在, 然后再决
定是否执行 rename 命令, 以避免覆盖重要数据
192.168.18.100:6379> keys k? ##查看
1) "k2"
2) "k1"
192.168.18.100:6379> rename k1 k5 ##将k1改名为k5
OK
192.168.18.100:6379> keys k? ##查看
1) "k2"
2) "k5"
----renamenx
renamenx 命令的作用是对已有 key 进行重命名, 并检测新名是否存在。 其命令格式与
rename 的命令格式除命令关键字不同外基本相同, renamenx 源 key 目标 key。 使用
renamenx 命令进行重命名时, 如果目标 key 存在则不进行重命名
192.168.18.100:6379> renamenx k2 k6 ##k2改名为k6
(integer) 1 ##改名成功
192.168.18.100:6379> keys k? ##查看
1) "k6"
2) "k5"
192.168.18.100:6379> renamenx k6 k5 ##k6改名k5
(integer) 0 ##因k5已存在未改名
192.168.18.100:6379> keys k? ##查看
1) "k6"
2) "k5"
----dbsize
dbsize 命令的作用是查看当前数据库中 key 的数目
192.168.18.100:6379> dbsize
(integer) 7 ##有7个key
192.168.18.100:6379> keys *
1) "students"
2) "mylist"
3) "k6"
4) "counter:__rand_int__"
5) "myset:__rand_int__"
6) "key:__rand_int__"
7) "k5"
-----设置密码
CONFIG SET requirepass 123123
#设置密码
auth 123123
#验证密码
CONFIG get requirepass
#查看密码
CONFIG set requirepass ''
#注意空格也算字符
192.168.18.100:6379> CONFIG SET requirepass 123123 ##设置密码
OK
192.168.18.100:6379> auth 123123 ##验证密码
OK
192.168.18.100:6379> CONFIG get requirepass ##查看密码
1) "requirepass"
2) "123123"
192.168.18.100:6379> CONFIG set requirepass '123321' ##更改密码
OK
192.168.18.100:6379> CONFIG get requirepass ##查看密码
1) "requirepass"
2) "123321"
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379 -a 123321
Warning: Using a password with '-a' or '-u' option on the command line
interface may not be safe. ###提醒用密码登录不安全
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379 ##未用密码登录
192.168.18.100:6379> set k2 21 ##创建key
(error) NOAUTH Authentication required. ###无法创建
192.168.18.100:6379> auth 123321 ##验证密码
OK
192.168.18.100:6379> set k2 21 ##再次创建创建成功
OK
192.168.18.100:6379> get key2
(nil)
192.168.18.100:6379> get k2
"21"
192.168.18.100:6379> CONFIG set requirepass '' ##去除密码可以将密码设为空
OK 注:空格也是字符
192.168.18.100:6379> quit
[root@localhost utils]# redis-cli -h 192.168.18.100 -p 6379 ##无密码登录
192.168.18.100:6379> set key3 22 ##可以创建key
OK
Redis 支持多数据库, Redis 在没有任何改动的情况下默认包含 16 个数据库, 数据库名
称是用数字 0-15 来依次命名的。 使用 Select 命令可以进行 Redis 的多数据库之间的切换,
命令格式为 select index,其中 index 表示数据库的序号。 而使用 redis-cli 连接 Redis 数
据库后, 默认使用的是序号为 0 的数据库。
----select----------
select 数据库编号
192.168.18.100:6379> select 3 ##可以跳转数据库号
OK
192.168.18.100:6379[3]> set dd 22
OK
192.168.18.100:6379[3]> keys *
1) "dd"
192.168.18.100:6379[3]> select 0
OK
192.168.18.100:6379> keys *
1) "mylist"
2) "key3"
3) "k5"
4) "k1"
5) "k2"
6) "students"
7) "counter:__rand_int__"
8) "k6"
9) "myset:__rand_int__"
10) "key:__rand_int__"
----多数据库间移动数据---
Redis 的多数据库在一定程度上是相对独立的, 例如在数据库 0 上面存放的 k1 的数据,
在其它的 1-15 的数据库上是无法查看到的。move 键名 数据库编号
192.168.18.100:6379> move key3 10 ##将键移动到10号库
(integer) 1
192.168.18.100:6379> select 10 ###进入10号库
OK
192.168.18.100:6379[10]> keys * ##查看键
1) "key3"
清除数据库内数据
Redis 数据库的整库数据删除主要分为两个部分: 清空当前数据库数据,
使用 FLUSHDB
命令实现; 清空所有数据库的数据, 使用 FLUSHALL 命令实现。 但是, 数据清空操作比较危
险, 生产环境下一般不建议使用。
192.168.18.100:6379[10]> flushdb ##清空数据库
OK
192.168.18.100:6379[10]> keys * ###数据库没有数据
(empty list or set)
192.168.18.100:6379[10]> select 3 ##转到3号库
OK
192.168.18.100:6379[3]> keys * ##查看有文件
1) "dd"
####由此可见 flushdb 只是清空当前所在数据库号的数据
192.168.18.100:6379[3]> select 10
OK
192.168.18.100:6379[10]> flushall ###清空数据库
OK
192.168.18.100:6379[10]> select 3 ##查看3号库数据被清空
OK
192.168.18.100:6379[3]> keys *
(empty list or set)
192.168.18.100:6379[3]> select 0 ###查看0号数据库数据被清空
OK
192.168.18.100:6379> keys *
(empty list or set)
###由此可见flushall是清空所有库的数据,在工作环境中一般禁止使用,使用时慎重慎重慎重!!!