目录
———————————————————————————————————————————
Redis官方地址:Redis
Redis简介
Redis (Remote Dictionary Server)在2009年发布,开发者Salvatore Sanfilippo是意大利开发者,他本想为自己的公司开发一个用于替换MySQL的产品Redis,但是没有想到他把Redis开源后大受欢迎,短短几年,Redis就有了很大的用户群体,目前国内外使用的公司众多,比如:阿里,百度,新浪微博,知乎网,GitHub,Twitter 等。
Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-valuedatabase),是一个非关系型数据库,redis 提供将内存通过网络远程共享的一种服务,提供类似功能的还有memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久性等功能。
在说Redis之前,我们要知道缓存是个是什么东西
缓存的概念
缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如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(Content Delivery Network,内容分发网),反向代理缓存
-
Web层: Web服务器缓存
-
应用层: 页面静态化
-
数据层: 分布式缓存,数据库
-
系统层: 操作系统cache
-
物理层: 磁盘cache, Raid Cache
DNS缓存
浏览器的DNS缓存默认为60秒,即60秒之内在访问同一个域名就不在进行DNS解析
应用层缓存
Nginx、PHP等web服务可以设置应用缓存以加速响应用户请求,另外有些解释性语言,比如:PHP/Python/Java不能直接运行,需要先编译成字节码,但字节码需要解释器解释为机器码之后才能执行,因此字节码也是一种缓存,有时候还会出现程序代码上线后字节码没有更新的现象。所以一般上线新版前,需要先将应用缓存清理,再上线新版。
另外可以利用动态页面静态化技术,加速访问,比如:将访问数据库的数据的动态页面,提前用程序生成静态页面文件html ,电商网站的商品介绍,评论信息非实时数据等皆可利用此技术实现。
数据层缓存
-
分布式缓存服务
Redis
Memcached
-
数据库
MySQL 查询缓存、innodb缓存、MYISAM缓存
硬件缓存
-
CPU缓存(L1的数据缓存和L1的指令缓存)、二级缓存、三级缓存
-
磁盘缓存:Disk Cache
-
磁盘阵列缓存: Raid Cache,可使用电池防止断电丢失数据
关系型数据库和NoSql数据库
数据库主要分为两大类:关系型数据库与 NoSQL 数据库。
关系型数据库
关系型数据库是一个结构化的数据库,创建在关系模型 (二维表格模型) 基础上,一般面向于记录。 SQL语句 (标准数据查询语言) 就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库。
非关系型数据库
NoSQL 数据库,全称为 Not Only SQL,意思是“不仅仅是SQL”,是非关系型数据库的总称。 除了主流的关系型数据库外的数据库,都认为是非关系型。 主流的 NoSQL 数据库有Redis、 MongBD、 Hbase、 Memcached 等。
适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键值存储(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) workdir=/usr/local/mysql
非关系型数据库不需要手动建数据库和集合(表)。
redis基础
redis特性
速度快: 10W QPS,基于内存,C语言实现
单线程
持久化
支持多种数据结构
支持多种编程语言
功能丰富: 支持Lua脚本,发布订阅,事务,pipeline等功能
简单: 代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单
主从复制
支持高可用和分布式
单线程
Redis 6.0版本前一直是单线程方式处理用户的请求
单线程为何如此快?
-
纯内存
-
非阻塞
-
避免线程切换和竞态消耗
redis 对比 memcached
-
支持数据的持久化:可以将内存中的数据保持在磁盘中,重启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 |
过期策略 | 支持 | 支持 |
数据类型 | 单一数据类型 | 五大数据类型 |
持久化 | 不支持 | 支持 |
主从复制 | 不支持 | 支持 |
虚拟内存 | 不支持 | 支持 |
redis 典型应用场景
Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享
缓存:数据查询、电商网站商品信息、新闻内容
计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景
微博/微信社交场合:共同好友,粉丝数,关注,点赞评论等
消息队列:ELK的日志缓存、部分业务的订阅发布系统
地理位置: 基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能
安装redis
首先安装依赖包
[root@localhost ~]# yum install -y gcc gcc-c++ make
解压
[root@localhost /opt]# tar zxvf redis-5.0.7.tar.gz
[root@localhost /opt]# cd /opt/redis-5.0.7/
[root@localhost /opt/redis-5.0.7]# make
由于Redis源码包中直接提供了Makefile 文件,所以在解压完软件包后,不用先执行./configure 进行配置,可直接执行make与make install命令进行安装
[root@localhost /opt/redis-5.0.7]# make PREFIX=/usr/local/redis install
执行软件包提供的 install_server.sh 脚本文件设置Redis服务所需要的相关配置文件
[root@localhost /opt/redis-5.0.7/utils]# ./install_server.sh
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 #客户端命令工具
可以查看redis是否开启
[root@localhost /opt/redis-5.0.7/utils]# ss -natp |grep redis
编辑配置文件
[root@localhost /opt/redis-5.0.7/utils]# vim /etc/redis/6379.conf
重启
[root@localhost /opt/redis-5.0.7/utils]# /etc/init.d/redis_6379 restart
可以在查看有一下redis
[root@localhost /opt/redis-5.0.7/utils]# ss -natp |grep redis LISTEN 0 128 192.168.37.106:6379 *:* users:(("redis-server",pid=58081,fd=7)) LISTEN 0 128 127.0.0.1:6379 *:* users:(("redis-server",pid=58081,fd=6))
把redis的可执行程序文件放入路径环境变量的目录中便于系统识别
[root@localhost /opt/redis-5.0.7/utils]# ln -s /usr/local/redis/bin/* /usr/local/bin/
redis相关命令
---------------------------------------------------redis命令工具-------------------------------------------------------
redis-server:
#用于启动 Redis 的工具
redis-benchmark:
#用于检测 Redis 在本机的运行效率
redis-check-aof:
#修复 AOF 持久化文件redis-check-rdb:
#修复 RDB 持久化文件
----------------------------------------------redis-cli 命令行工具-------------------------------------------------
语法:
redis-cli -h host -p port -a password -n 数据序号(0-15)
-h | 指定远程主机 |
-p | 指定redis服务端口 |
指定redis服务端口 | 指定密码,未设置数据库密码可以省略-a选项 |
-n | 指定数据序号 库默认是0号库redis有16个库(0-15) |
若不添加任何选型表示,则使用127.0.0.1:6379 连接本机上的redis 数据库
redis-cli -h 192.168.37.106 -p 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 | 通过管道传输<numreq>请求 |
-q | 强制退出 redis。 仅显示 query/sec 值 |
--csv | 以 CSV 格式输出 |
-l | 生成循环, 永久执行测试 |
-t | 仅运行以逗号分隔的测试命令列表 |
-I | Idle 模式。 仅打开 N 个 idle 连接并等待 |
结合上述选项, 可以针对某台 Redis 服务器进行性能检测,
如执行 redis-benchmark -h 192.168.37.106 -p 6379 -c 100 -n 1000 命令即可向 IP 地址为192.168.37.106、 端口,为 6379 的 Redis 服务器发送 100 个并发连接与 1000 个请求测试性能。
redis-benchmark -h 192.168.37.106 -p 6379 -c 100 -n 10000
[root@localhost /usr/local/bin]# redis-benchmark -h 192.168.37.106 -p 6379 -c 100 -n 10000
====== PING_INLINE ======
10000 requests completed in 0.07 seconds
100 parallel clients
3 bytes payload
keep alive: 1
96.42% <= 1 milliseconds
99.97% <= 2 milliseconds
100.00% <= 3 milliseconds
142857.14 requests per second
====== PING_BULK ======
10000 requests completed in 0.06 seconds
100 parallel clients
3 bytes payload
keep alive: 1
99.01% <= 13 milliseconds
100.00% <= 13 milliseconds
161290.33 requests per second
====== SET ======
10000 requests completed in 0.07 seconds
100 parallel clients
3 bytes payload
keep alive: 1
98.98% <= 8 milliseconds
99.01% <= 9 milliseconds
99.04% <= 16 milliseconds
99.24% <= 17 milliseconds
100.00% <= 17 milliseconds
151515.16 requests per second
====== GET ======
10000 requests completed in 0.06 seconds
100 parallel clients
3 bytes payload
keep alive: 1
97.21% <= 1 milliseconds
99.77% <= 2 milliseconds
100.00% <= 2 milliseconds
156250.00 requests per second
====== INCR ======
10000 requests completed in 0.06 seconds
100 parallel clients
3 bytes payload
keep alive: 1
98.84% <= 1 milliseconds
100.00% <= 1 milliseconds
153846.16 requests per second
====== LPUSH ======
10000 requests completed in 0.05 seconds
100 parallel clients
3 bytes payload
keep alive: 1
100.00% <= 0 milliseconds
196078.44 requests per second
====== RPUSH ======
10000 requests completed in 0.05 seconds
100 parallel clients
3 bytes payload
keep alive: 1
100.00% <= 0 milliseconds
217391.30 requests per second
====== LPOP ======
10000 requests completed in 0.05 seconds
100 parallel clients
3 bytes payload
keep alive: 1
99.93% <= 1 milliseconds
100.00% <= 1 milliseconds
217391.30 requests per second
====== RPOP ======
10000 requests completed in 0.07 seconds
100 parallel clients
3 bytes payload
keep alive: 1
95.50% <= 1 milliseconds
100.00% <= 1 milliseconds
147058.81 requests per second
====== SADD ======
10000 requests completed in 0.06 seconds
100 parallel clients
3 bytes payload
keep alive: 1
100.00% <= 0 milliseconds
178571.42 requests per second
====== HSET ======
10000 requests completed in 0.06 seconds
100 parallel clients
3 bytes payload
keep alive: 1
99.32% <= 1 milliseconds
100.00% <= 1 milliseconds
172413.80 requests per second
====== SPOP ======
10000 requests completed in 0.06 seconds
100 parallel clients
3 bytes payload
keep alive: 1
99.99% <= 1 milliseconds
100.00% <= 1 milliseconds
175438.59 requests per second
====== LPUSH (needed to benchmark LRANGE) ======
10000 requests completed in 0.06 seconds
100 parallel clients
3 bytes payload
keep alive: 1
100.00% <= 0 milliseconds
172413.80 requests per second
====== LRANGE_100 (first 100 elements) ======
10000 requests completed in 0.14 seconds
100 parallel clients
3 bytes payload
keep alive: 1
92.29% <= 1 milliseconds
97.95% <= 2 milliseconds
98.91% <= 3 milliseconds
99.32% <= 4 milliseconds
99.66% <= 5 milliseconds
99.84% <= 6 milliseconds
100.00% <= 6 milliseconds
72992.70 requests per second
====== LRANGE_300 (first 300 elements) ======
10000 requests completed in 0.34 seconds
100 parallel clients
3 bytes payload
keep alive: 1
0.01% <= 1 milliseconds
93.98% <= 2 milliseconds
97.04% <= 3 milliseconds
97.99% <= 4 milliseconds
98.47% <= 5 milliseconds
98.75% <= 6 milliseconds
98.97% <= 7 milliseconds
99.12% <= 8 milliseconds
99.19% <= 9 milliseconds
99.27% <= 10 milliseconds
99.34% <= 11 milliseconds
99.42% <= 12 milliseconds
99.49% <= 13 milliseconds
99.55% <= 14 milliseconds
99.65% <= 15 milliseconds
99.78% <= 16 milliseconds
99.93% <= 17 milliseconds
99.99% <= 18 milliseconds
100.00% <= 18 milliseconds
28985.51 requests per second
====== LRANGE_500 (first 450 elements) ======
10000 requests completed in 0.46 seconds
100 parallel clients
3 bytes payload
keep alive: 1
0.01% <= 1 milliseconds
20.05% <= 2 milliseconds
95.62% <= 3 milliseconds
97.55% <= 4 milliseconds
98.36% <= 5 milliseconds
98.79% <= 6 milliseconds
99.05% <= 7 milliseconds
99.18% <= 8 milliseconds
99.39% <= 9 milliseconds
99.58% <= 10 milliseconds
99.75% <= 11 milliseconds
99.87% <= 12 milliseconds
99.96% <= 13 milliseconds
100.00% <= 13 milliseconds
21929.82 requests per second
====== LRANGE_600 (first 600 elements) ======
10000 requests completed in 0.56 seconds
100 parallel clients
3 bytes payload
keep alive: 1
0.09% <= 1 milliseconds
0.85% <= 2 milliseconds
72.41% <= 3 milliseconds
98.78% <= 4 milliseconds
99.22% <= 5 milliseconds
99.45% <= 6 milliseconds
99.80% <= 7 milliseconds
99.95% <= 8 milliseconds
100.00% <= 8 milliseconds
17985.61 requests per second
====== MSET (10 keys) ======
10000 requests completed in 0.05 seconds
100 parallel clients
3 bytes payload
keep alive: 1
99.95% <= 1 milliseconds
100.00% <= 1 milliseconds
196078.44 requests per second
执行 redis-benchmark -h 192.168.100.41 -p 6379 -q -d 100 命令的作用是测试存取大小为 100 字节的数据包的性能。
redis-benchmark -h 192.168.37.106 -p 6379 -q -d 100
[root@localhost /usr/local/bin]# redis-benchmark -h 192.168.37.106 -p 6379 -q -d 100
PING_INLINE: 226757.36 requests per second
PING_BULK: 224215.23 requests per second
SET: 227790.42 requests per second
GET: 224215.23 requests per second
INCR: 226244.34 requests per second
LPUSH: 235849.06 requests per second
RPUSH: 223214.28 requests per second
LPOP: 227790.42 requests per second
RPOP: 232018.56 requests per second
SADD: 227790.42 requests per second
HSET: 232558.14 requests per second
SPOP: 225225.22 requests per second
LPUSH (needed to benchmark LRANGE): 234741.78 requests per second
LRANGE_100 (first 100 elements): 75528.70 requests per second
LRANGE_300 (first 300 elements): 28089.89 requests per second
LRANGE_500 (first 450 elements): 18656.72 requests per second
LRANGE_600 (first 600 elements): 13831.26 requests per second
MSET (10 keys): 173913.05 requests per second
还可以测试某些操作的性能, 例如执行 redis-benchmark -t set,lpush -n 100000 -q
命令的作用是测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能。
redis-benchmark -t set,lpush -n 100000 -q
[root@localhost /usr/local/bin]# redis-benchmark -t set,lpush -n 100000 -q
SET: 229885.06 requests per second
LPUSH: 236966.83 requests per second
Redis数据库常用命令
登录redis
[root@localhost /usr/local/bin]# redis-cli -h 192.168.37.106 -p 6379
192.168.37.106:6379>
设置键和值
192.168.37.106:6379> set students bb
OK
192.168.37.106:6379> get students
"bb"
使用 keys 命令可以取符合规则的键值列表, 通常情况可以结合*、 ? 等选项来使用
测试,多建几个键值对
192.168.37.106:6379> set v1 s1
OK
192.168.37.106:6379> set v2 s2
OK
192.168.37.106:6379> set v3 s3
OK
192.168.37.106:6379> set v23 s32
OK
192.168.37.106:6379> KEYS v??
1) "v23"
192.168.37.106:6379> KEYS *
1) "counter:__rand_int__"
2) "key:__rand_int__"
3) "v3"
4) "v23"
5) "students"
6) "myset:__rand_int__"
7) "mylist"
8) "v1"
9) "v2"
查看当前数据库中以 v 开头的数据
192.168.37.106:6379> KEYS v*
1) "v3"
2) "v23"
3) "v1"
4) "v2"
查看当前数据库中以 v 开头后面包含任意一位的数据
192.168.37.106:6379> KEYS v?
1) "v3"
2) "v1"
3) "v2"
查看当前数据库中以 v 开头 v 开头后面包含任意两位的数据
192.168.37.106:6379> KEYS v??
1) "v23"
-----------------exists----------------
exists 命令可以判断键值是否存在。返回0为没有,返回1则有
192.168.37.106:6379> exists bb
(integer) 0
192.168.37.106:6379> exists xb
(integer) 0
192.168.37.106:6379> exists v1
(integer) 1
---------------------type--------------
使用 type 命令可以获取 key 对应的 value 值类型
192.168.37.106:6379> type v1
string
---------------------rename---------------
rename 源 key 目标 key
rename 命令是对已有 key 进行重命名, 其命令格式为: rename 源 key 目标 key。 使用rename 命令进行重命名时, 无论目标 key 是否存在都进行重命名, 且源 key 的值会覆盖目标 key 的值。 在实际使用过程中, 建议先用 exists 命令查看目标 key 是否存在, 然后再决定是否执行 rename 命令, 以避免覆盖重要数据
192.168.37.106:6379> KEYS v*
1) "v3"
2) "v1"
3) "v2"
192.168.37.106:6379> rename v2 v33
OK
192.168.37.106:6379> KEYS v*
1) "v3"
2) "v33"
3) "v1"
-------------------renamenx--------------
renamenx 命令的作用是对已有 key 进行重命名, 并检测新名是否存在。 其命令格式与
rename 的命令格式除命令关键字不同外基本相同, renamenx 源 key 目标 key。 使用renamenx 命令进行重命名时, 如果目标 key 存在则不进行重命名
192.168.37.106:6379> renamex v33 v2
(error) ERR unknown command `renamex`, with args beginning with: `v33`, `v2`,
-----------------------dbsize----------------
dbsize 命令的作用是查看当前数据库中 key 的数目
192.168.37.106:6379> dbsize
(integer) 9
-----------------------设置密码---------------
192.168.37.106:6379> CONFIG SET requirepass 123123
OK
注意空格也算字符哦
此时看键值对是报错的
192.168.37.106:6379> KEYS *
(error) NOAUTH Authentication required.
验证密码即可
192.168.37.106:6379> AUTH 123123
OK
192.168.37.106:6379> KEYS *
1) "counter:__rand_int__"
2) "key:__rand_int__"
3) "v3"
4) "v33"
5) "students"
6) "myset:__rand_int__"
7) "mylist"
8) "23"
9) "v1"
查看密码
192.168.37.106:6379> CONFIG GET requirepass
1) "requirepass"
2) "123123"
--------------------------------------------------多数据库操作------------------------------------------------------------
Redis 支持多数据库, Redis 在没有任何改动的情况下默认包含 16 个数据库, 数据库名
称是用数字 0-15 来依次命名的。 使用 Select 命令可以进行 Redis 的多数据库之间的切换,
命令格式为 select index,其中 index 表示数据库的序号。 而使用 redis-cli 连接 Redis 数
据库后, 默认使用的是序号为 0 的数据库。
-------------select-----------------
select 数据库编号
192.168.37.106:6379> SELECT 10
OK
192.168.37.106:6379[10]> SELECT 5
OK
-----------------多数据库间移动数据------------------------
Redis 的多数据库在一定程度上是相对独立的, 例如在数据库 0 上面存放的 k1 的数据,
在其它的 1-15 的数据库上是无法查看到的。
move 键名 数据库编号
192.168.37.106:6379[1]> MOVE xb 0
(integer) 1
清除数据库内数据
Redis 数据库的整库数据删除主要分为两个部分: 清空当前数据库数据, 使用 FLUSHDB
命令实现
192.168.37.106:6379> SELECT 1
OK
192.168.37.106:6379[1]> set s1 12
OK
192.168.37.106:6379[1]> KEYS *
1) "s1"
192.168.37.106:6379[1]> FLUSHDB
OK
192.168.37.106:6379[1]> KEYS *
(empty list or set)
清空所有数据库的数据, 使用 FLUSHALL 命令实现。 但是, 数据清空操作比较危险, 生产环境下一般不建议使用
总结
Redis是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。