Redis 数据库介绍、安装及基本操作指令
- 一、Redis 数据库概述
- 1.1 Redis 介绍
- 1.2 Redis 的下载与安装
- 1.3 Redis 的基本操作指令
- 1.4 Redis 的数据类型
- 二、Redis 常用操作指令
- 2.1 key 常用操作指令
- 2.2 Redis 数据库通用指令
- 三、Redis 配置文件.conf
一、Redis 数据库概述
1.1 Redis 介绍
1.1.1 Redis 概念
Redis(REmote DIctionary Server) 是一个由Salvatore Sanfilippo用C语言开发的开源的高性能键值对(key-value)数据库,它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
Redis 与其他 key-value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
1.1.2 Redis 优点
(1)速度快
正常情况下,Redis执行命令的速度非常快,官方给出的数字是读写性能可以达到10万/秒。Redis速度快的原因如下
- Redis的所有数据都是存放在内存中的,把数据放在内存中是Redis速度快的最主要原因。
- Redis是用C语言实现的,一般来说C语言实现的程序“距离”操作系统更近,执行速度相对会更快。
- Redis使用了单线程架构,预防了多线程可能产生的竞争问题。
(2)基于键值对的数据结构服务器
几乎所有的编程语言都提供了类似字典的功能,例如Java里的map、Python里的dict,类似于这种组织数据的方式叫作基于键值的方式,与很多键值对数据库不同的是,Redis中的值不仅可以是字符串,而且还可以是具体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能够提高开发效率。
Redis的全称是REmote Dictionary Server,它主要提供了5种数据结构:字符串、哈希、列表、集合、有序集合,同时在字符串的基础之上演变出了位图(Bitmaps)和HyperLogLog两种神奇的“数据结构”,并且随着LBS(Location Based Service,基于位置服务)的不断发展,Redis3.2版本中加入有关GEO(地理信息定位)的功能,总之在这些数据结构的帮助下,开发者可以开发出各种“有意思”的应用。
(3)丰富的功能
除了5种数据结构,Redis还提供了许多额外的功能:
- 提供了键过期功能,可以用来实现缓存。
- 提供了发布订阅功能,可以用来实现消息系统。
- 支持Lua脚本功能,可以利用Lua创造出新的Redis命令。
- 提供了简单的事务功能,能在一定程度上保证事务特性。
- 提供了流水线(Pipeline)功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销。
(4)简单稳定
Redis的简单主要表现在三个方面:
- Redis的源码很少,早期版本的代码只有2万行左右,3.0版本以后由于添加了集群特性,代码增至5万行左右,相对于很多NoSQL数据库来说代码量相对要少很多,也就意味着普通的开发和运维人员完全可以“吃透”它。
- Redis使用单线程模型,这样不仅使得Redis服务端处理模型变得简单,而且也使得客户端开发变得简单。
- Redis不需要依赖于操作系统中的类库(例如Memcache需要依赖libevent这样的系统类库),Redis自己实现了事件处理的相关功能。
Redis虽然很简单,但是不代表它不稳定。以笔者维护的上千个Redis为例,没有出现过因为Redis自身bug而宕掉的情况。
(5)客户端语言多
Redis提供了简单的TCP通信协议,很多编程语言可以很方便地接入到Redis,并且由于Redis受到社区和各大公司的广泛认可,所以支持Redis的客户端语言也非常多,几乎涵盖了主流的编程语言,例如Java、PHP、Python、C、C++、Nodejs等,第4章我们将对Redis的客户端进行详细说明。
(6)持久化
通常看,将数据放在内存中是不安全的,一旦发生断电或者机器故障,重要的数据可能就会丢失,因此Redis提供了两种持久化方式:RDB和AOF,即可以用两种策略将内存的数据保存到硬盘中,这样就保证了数据的可持久性,第5章我们将对Redis的持久化进行详细说明。
(7)主从复制
Redis提供了复制功能,实现了多个相同数据的Redis副本,复制功能是分布式Redis的基础。第6章我们将对Redis的复制进行详细说明。
(8)高可用和分布式
Redis从2.8版本正式提供了高可用实现Redis Sentinel,它能够保证Redis节点的故障发现和故障自动转移。Redis从3.0版本正式提供了分布式实现Redis Cluster,它是Redis真正的分布式实现,提供了高可用、读写和容量的扩展性。
1.1.3 Redis 使用场景
(1)热点数据加速查询
(2)任务列队,如秒杀、抢购、购票等
(3)即时信息查询
(4)时效性信息控制,如验证码控制,投票控制。
(5)分布式数据共享,如分布式集群架构中的session分离
(6)消息队列
(7)分布式锁
1.2 Redis 的下载与安装
1.2.1 Redis 的下载与安装
Redis 的下载地址:https://github.com/MSOpenTech/redis/releases
。
打开网址进入一下界面,选择对应的版本,这里选择3.2.100。
选择版本下载
解压下载后的Redis,得到下面的内容
文件说明
-
redis-server.exe
:Redis 启动服务,相当于服务端 -
redis-cli.exe
:Redis 操作端,相当于客户端 -
redis-check-aof.exe
:做Redis 持久化 -
redis-benchmark.exe
:做 Redis 性能测试
1.2.2 Redis 启动
Redis 的可以直接点击.exe文件启动,也可以执行cmd指令启动。
(1)点击redis-server.exe
文件启动服务
然后启动客户端redis-cli.exe
操作Redis
(2)执行cmd指令启动
先通过一个cmd窗口启动服务
再通过一个cmd窗口启动客户端
1.3 Redis 的基本操作指令
1.3.1 添加信息
命令
set key value
示例
set name JACK
1.3.2 查询信息
根据key查询对应的value,如果key不存在,则返回空(nil)
命令
get key
这个命令时客户端的
示例
get name
示例
1.3.3 帮助
命令
help 命令名称
help @组名
示例
help
help get
help @string
help
示例
1.3.4 退出
命令
quit
exit
<ESC>
1.4 Redis 的数据类型
Redis 本身是一个Map,其中所有的数据都是以key:value的形式存储的,Redis的数据类型指的是存储的数据的类型,即value的类型,而key永远都是字符串格式。
1.4.1 strng 类型
(1)介绍
strng 类型存储的数据为单个数据,是最简单的数据存储类型,也是最常用的数据存储类型。
strng 类型存储数据的格式:一个存储空间保存一个数据。
strng 类型存储内容:通常使用字符串,如果字符串以整数的形式展示,可以作为数字操作使用。
(2)操作命令
//添加/修改信息
set key value
//查询获取信息
get key
//删除信息
del key
//添加/修改信息
mset key1 value1 key2 value2 ..
//查询取信息
mget key1 key2 ...
//获取数据字符个数(字符串长度)
strlen key
//追加信息到原始信息后面(如果原始信息不存在,则为新建)
append key value
示例
127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> get name
"jack"
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379> mset name jack age 18
OK
127.0.0.1:6379> mget name age
1) "jack"
2) "18"
127.0.0.1:6379> strlen name
(integer) 4
127.0.0.1:6379> append sex man
(integer) 6
127.0.0.1:6379> mget name age sex
1) "jack"
2) "18"
3) "manman"
示例
其他命令
//设置数值数据增加指定的值
//每次增加1
incr key
//增加指定的值
incrby key increment
//增加指定的小数值
incrbyfloat key increment
//设置数值数据减少指定的值
//每次减少1
decr key
//减少执行的值
decrby key increment
//设置数据的生命周期
setex key seconds value
psetex key milliseconds value
示例
(3)注意事项
数据操作不成功反馈与数据正常操作反馈的差异
- 表示运行结果成功
- (integer) 0:0,表示false,操作失败。
- (integer) 1:1,表示true,操纵成功。
- 表示运行结果值
- (integer) 1:1,表示1,操作1个。
- (integer) 3:3,表示3,操作3个。
数据未获取到
- 反馈结果为nii:等同于null
数据最大存储量
- 512MB
数值计算最大范围
- 9223372036854775807:java中long类型的最大值
1.4.2 hash 类型
(1)介绍
hash数据类型的底层是使用哈希表结构实现数据存储的。
(2)操作命令
/* 单个数据操作 */
//添加/修改信息
hset key filed value
//获取数据
hget key filed
hgetall key
//删除数据
hdel key filed1 [filed2]
/* 多个数据操作 */
//添加/修改信息
hmset key filed1 value1 filed2 value2...
//获取数据
hmget key filed1 filed2
/* 其他操作 */
//获取哈希表中字段的数量
hlen key
//获取哈希表中是否存在指定的字段
hexists key filed
//获取哈希表中所有的字段名或字段值
hkeys key
hvals key
//设置指定字段的数值数据增加指定范围的值
hincrby key filed increment
hincrbyfloat key filed increment
示例
(3)注意事项
- hash数据类型下的value只能存储字符串,不允许存储其他数据类型,也不存在数据嵌套现象。
- 如果数据未获取到,返回值为
nil
- 每个hash可以存储
2^32-1
个键值对 - hash数据类型与对象的数据存储形式相似,并且可以灵活的添加删除对象属性。但hash数据存储不是为存储大量对象而设计的,不能将hash作为对象列表使用。
-
hgetall
命令可以获取全部属性,但是如果内部的filed过多,就会大大降低整体数据的i遍历效率。
1.4.3 list 类型
(1)介绍
list数据类型能保存多个数据,底层使用双向链表存储结构实现。
(2)操作指令
// 添加/修改数据
lpush key value1 [value2]... //在左边添加修改
rpush key value1 [value2]... //在右边添加修改
// 获取数据
lrange key start stop //lrange key 0 -1 查看所有
lindex key index
llen key
// 获取并移除数据
lpop key
rpop key
//移除指定数据
lrem key count value
//规定时间内获取并移除数据(如果没有数据,则等待指定的时间)
blpop key1 [key2] timeout
brpop key1 [key2] timeout
示例
(3)注意事项
- list中保存的数据都是string类型的,数据总容量是有限的,最多2^32-1个元素(4294967295)。
- list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈的形式进行入栈出栈操作。
- list获取全部数据操作结束索引设置为-1。
- list可以对数据进行分页操作,通常第一页的信息来自于list,第2页及更多的信息通过数据库的形式加载。
1.4.4 set 类型
(1)介绍
set类型与hash类型的存储结构完全相同,仅存储键不存储值(nil),并且值不允许重复。
(2)操作指令
//添加数据
sadd key member1 [member2]
//获取全部数据
smembers key
//删除数据
srem key member1 [member2]
//获取集合数据总量
scard key
//判断集合中是否包含指定数据
sismember key member
//随机获取集合中指定数量的数据
srandmember key [count]
//随即及获取集合中某个数据并将该数据移出集合
spop key
示例
//求两个集合的交、并、差集
sinter key1 [key2]
sunion key1 [key2]
sdiff key1 [key2]
//求两个集合的交、并、差集并存储到指定集合中(destination为指定集合)
sinterstore destination key1 [key2]
sunionstore destination key1 [key2]
sdiffstore destination key1 [key2]
//将指定数据从原始集合中移动到目标集合中
smove source destination member
示例
(3)注意事项
-set类型不允许数据重复,如果添加的数据在set中已经存在,将只保留一份。
set虽然与hash的存储结构相同,但是无法启用hash中存储值的空间。
1.4.5 sorted_set 类型
(1)介绍
sorted_set类型是在set类型的存储结构基础上添加可排序字段。
(2)操作指令
//添加数据
zadd key score1 member1 [score2 member2]
//获取全部数据
zrange key start stop [WITHSCORES] //正向排序,由小到大
zrevrange key start stop [WITHSCORES] //反向排序,由大到小
//删除数据
zrem key member [member ...]
//按条件获取数据
zrangebyscore key min max [WITHSCORES] [LIMIT] //正向
zrevrangebyscore key max min [WITHSCORES] //反向
//条件删除数据
zremrangebyrank key start stop //按索引删除
zremrangebyscore key min max //按排序范围删除
//获取集合数据总量
zcard key
zcount key min max //指定范围内的数据个数
//集合交、并操作
zinterstore destination numkeys key [key ...]
zunionstore destination numkeys key [key ...]
//获取数据对应的索引(排名)
zrank key member
zrevrank key member
//score值获取与修改
zscore key member
zincrby key increment member
示例
(3)注意事项
- score保存的数据存储空间是64位,如果是整数范围是
9007199254740992~9007199254740992
。 - score保存的数据也可以是一个双精度的double值,基于双精度浮点数的特征,可能会丢失精度,使用时
候要慎重。
sorted_ set底层存储还是基于set结构的,因此数据不能重复,如果重复添加相同的数据,score值将被反
复覆盖,保留最后一次修改的结果。
二、Redis 常用操作指令
2.1 key 常用操作指令
2.1.1 基本操作指令
//删除指定key
del key
//获取key是否存在
exists key
//获取key的类型
type key
示例
2.1.2 时效性控制指令
//为指定key设置有效期
expire key seconds
pexpire key milliseconds
expireat key timestamp
pexpireat key milli seconds- timest amp
//获取key的有效时间,key不存在则返回-2,存在则当前有效期时间,如果是永久有效则返回-1
ttl key
ptt1 key
//切换key从时效性转换为永久性
persist key
示例
2.1.3 查询操作
//查询key
keys patern
patern匹配规则
-
*
:匹配任意数量的任意符号 -
?
:配合-个任意符号 -
[]
:匹配一个指定符号
示例如下
2.1.4 key 其他常用操作
//重命名key
rename key newkey
renamenx key newkey
//对所有key排序
sort
//其他key通用操作
help @generic
示例
2.2 Redis 数据库通用指令
**2.2.1 数据库切换操作 **
Redis 为每个服务提供了16个数据库,编号从0到15,每个数据库之间的数据相互独立。
//切换数据库
select index
//退出
quit
//测试服务器是否接通
ping
//Redis控制台打印日志
echo message
示例
2.2.2 数据相关操作
//移动过数据到指定数据库
move key db
//查看当前库有多少个key
dbsize
//清除当前数据库的数据
flushdb
//清除所有数据库的数据
flushall
示例
三、Redis 配置文件.conf
服务器配置
设置服务器以守护进程的方式运行
daemonize yes|no
设置主机地址
bind 127.0.0.1
设置服务器端口号
port 6379
设置数据库数量
databases 16
日志配置
设置服务器以指定日志记录级别(默认是verbose)
1og1evel debug|verbose|notice|warning
日志记录文件名
1ogfile 端口号.1og
客户端配置
设置同一时间最大客户端连接数,默认0表示无限制。当客户端连接到达上限,Redis会关闭新的连接
maxelients 0
客户端闲置等待最大时长,达到最大值后关闭连接,如需关闭该功能,设置为0
timeout 300
多服务器快捷配置
导入并加载指定配置文件信息,用于快速创建redis公共配置较多的redis实例配置文件,便于维护
include /path/server-端口号.conf