Redis 非关系型数据库
- 关系型数据库与非关系型数据库
- 关系型数据库
- 非关系型数据库
- 非关系型数据库产生的背景
- Redis 简介
- Redis配置文件中的配置参数
- Redis 数据库常用命令
- Redis多数据操作
- Redis数据类型
- Redis支持五种数据类型
关系型数据库与非关系型数据库
关系型数据库
- 一个结构化的数据库,创建在关系模型基础上
- 一般面向于记录
- 包括:Oracle、MySQL、SQL Server、Microsoft Access、DB2等
非关系型数据库
- 除了主流的关系型数据库外的数据库,都认为是非关系型数据库
- 包括:Redis、MongBD、Hbase、CouhDB等
非关系型数据库产生的背景
- High performance :对数据库高并发读写需求
- Huge Storage :对海量数据高校存储与访问需求
- High Scalability && Availability :对数据库高可扩展性与高可用性需求
Redis 简介
- Redis 基于内存运行并支持持久化
- 采用 key-value(键值对) 的存储形式
- 优势
- 具有极高的书籍读写速度
- 支持丰富的数据类型
- 支持数据的持久化
- 原子性
- 支持数据备份
Redis配置文件中的配置参数
- bind :监听的主机地址
- port :端口
- daemonize yes :启动守护进程
- pidfile :指定PID文件
- loglevel notice :日志级别
- logfile :指定日志文件
Redis 数据库常用命令
- redis-cli 命令行工具 —— 获得帮助(进入到数据库中使用)
help @< group >:获取<group>中的命令列表
help < command >:获取某个命令的帮助
help < tab >:获取可能帮助的主题列表
set :存放命令
get:获取数据
- key 相关命令
keys :获取符合规则的键值列表
exists :判断键值是否存在
del : 删除当前数据库的指定key
type :获取key对应的value值类型
rename(覆盖) :对已有的key进行重命名
renamenx(不覆盖) :对已有的key进行重命名
dbsize :查看当前数据库中key的数目
pexpire :设置超时时间(失效时间,也就是超过时间自动删除;单位:毫秒)
pttl :查看剩余时间(-1 为永久不超时)
persist :取消超时时间(将 key 重新设为 -1)
randomkey :随机返回key
示例:
keys 示例:
20.0.0.102:6379> keys *
1) "name"
2) "long"
exists 示例:
20.0.0.102:6379> keys *
ky1
name
yaya
bye
20.0.0.102:6379> exists yaya bye
2
del 示例:
20.0.0.102:6379> del cr wq zbm opt
4
20.0.0.102:6379> keys *
bye
ky1
look
type 示例:
20.0.0.102:6379> type long
hash
20.0.0.102:6379> type name
string
rename 示例:
20.0.0.102:6379> keys *
name
long
20.0.0.102:6379> rename name gbku
OK
20.0.0.102:6379> get gbku
lisi
dbsize 示例:
20.0.0.102:6379> keys *
name
bye
20.0.0.102:6379> dbsize
2
pexpire 示例:
20.0.0.102:6379> pexpire bye 500000
1
20.0.0.102:6379> pttl bye
493547
20.0.0.102:6379> pttl bye
491734
20.0.0.102:6379> pttl bye
pttl 示例:
20.0.0.102:6379> pttl gbku
-1 ### -1 为永久不超时
persist 示例:
20.0.0.102:6379> pttl bye
402176
20.0.0.102:6379> persist bye
1
20.0.0.102:6379> pttl bye
-1
randomkey 示例:
20.0.0.102:6379> keys *
cr
bye
ky1
wq
look
zbm
opt
20.0.0.102:6379> randomkey
bye
20.0.0.102:6379> randomkey
opt
20.0.0.102:6379> randomkey
cr
20.0.0.102:6379> randomkey
opt
- redis-benchmark测试工具
-h :指定服务器主机名
-p :指定服务器端口
-c :指定并发连接数
-d :以字节的形式指定 SET/GET 值的数据大小(吞吐量)
-q :强制退出redis,仅显示 query/sec
示例1:向ip地址为 192.168.10.161、端口为6379的redis服务器发送100个并发连接与100000个请求测试性能
/usr/local/redis/bin/redis-benchmark -h 192.168.10.161 -p 6379 -c 100 -n 100000
示例2:测试存取大小为100字节的数据表的性能
/usr/local/redis/bin/redis-benchmark -h 192.168.10.161 -p 6379 -q -d 100
Redis多数据操作
1、Redis 支持多数据,默认支持16个数据库,0-15命名
2、多数据库相互独立,互不干扰(不共享)
3、多数据库常用命令:
多数据库之间切换
多数据库间移动
清除数据库内数据
Redis数据类型
Redis支持五种数据类型
- string(字符串)
string 是 redis 最基本的类型,一个 key 对应一个 value
string 类型是二进制安全的。 redis 的 string 可包含任何数据。比如 jpg 图片或者序列化的对象
示例:
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> get name
"lisi"
- hash(哈希)
redis hash 是一个键值(key=>value)对结合
redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象
示例:
20.0.0.102:6379> hmset long id 7 age 22 sex 男
OK
20.0.0.102:6379> hget long id
"7"
20.0.0.102:6379> hget long age
"22"
20.0.0.102:6379> hget long sex
"\xe7\x94\xb7"
解决乱码问题:
[root@localhost utils]# redis-cli -h 20.0.0.102 -p 6379 --raw
20.0.0.102:6379> hget long sex
男
- list(列表)
redis 列表是简单的字符集列表,按照插入顺序排序,可以重复
列表最多可存储 2的32次方 -1元素。
示例:
20.0.0.102:6379> lpush cook dage1 dage2 dage3
3
20.0.0.102:6379> lrange cook 0 10
dage3
dage2
dage1
20.0.0.102:6379> lpush cook nv1 nv2 nv3
6
20.0.0.102:6379> lrange cook 0 10
nv3
nv2
nv1
dage3
dage2
dage1
20.0.0.102:6379> lrange cook 0 0
nv3
20.0.0.102:6379> lrange cook 0 1
nv3
nv2
20.0.0.102:6379> lrange cook 1 2
nv2
nv1
20.0.0.102:6379> lrange cook 2 2 ####把返回值看做是堆栈,查看的是索引,第一个值为0,第二个值为1 .....
nv1
20.0.0.102:6379> lrange cook 1 3 ###从索引1开始(nv2),到3结束(dage3),它(nv2)本身也算1
nv2
nv1
dage3
20.0.0.102:6379>
20.0.0.102:6379> LPUSH cook nv3
7
20.0.0.102:6379> lrange cook 0 10 ###可以存储相同值,可以重复
nv3
nv3
nv2
nv1
dage3
dage2
dage1
- set(集合)
redis 的 set 是 string 类型的无序集合
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是0(1)
示例:
20.0.0.102:6379> sadd ky1 zhangfei liubei guanyu
3
20.0.0.102:6379> smembers ky1
zhangfei
guanyu
liubei
20.0.0.102:6379> sadd ky1 zhangfei
0
20.0.0.102:6379> smembers ky1
zhangfei
guanyu
liubei
- zset(sorted set:有序集合)
redis zset 和 set 一样也是 string 类型元素的集合,且不允许重复的成员
不同的是每个元素都会关联一个double类型的分数。redis正式通过分数来为集合中的成员进行从小到大的排序
zset 的成员是唯一的,但分数(score)却可以重复
zadd命令
添加元素到集合,元素在集合中存在则更新对应score
示例:
20.0.0.102:6379> zadd yaya 0 red
1
20.0.0.102:6379> zadd yaya 0 god
1
20.0.0.102:6379> zadd yaya 1 bule
1
20.0.0.102:6379> zadd yaya 1 gren
1
20.0.0.102:6379> zrangebyscore yaya 0 10
god
red
bule
gren
20.0.0.102:6379> zrangebyscore yaya 0 0
god
red
20.0.0.102:6379> zrangebyscore yaya 1 1
bule
gren
20.0.0.102:6379> zadd yaya 0.5 wuwu
1
20.0.0.102:6379> zrangebyscore yaya 0 10 ###将0.5插入到0 和 1之间,证明是有序集合
god
red
wuwu
bule
gren
- 多数据库概念
Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念
Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。
这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。
不过可以随时使用SELECT命令更换数据库,如要选择1号数据库:
20.0.0.102:6379> select 1
OK
20.0.0.102:6379[1]> select 2
OK
迁移0号数据库中的yaya keys 到 1号数据库中:
20.0.0.102:6379[2]> select 1
OK
20.0.0.102:6379[1]> keys *
20.0.0.102:6379[1]> select 0
OK
20.0.0.102:6379> keys *
ky1
name
yaya
bye
20.0.0.102:6379> MOVE yaya 1
1
20.0.0.102:6379> select 1
OK
20.0.0.102:6379[1]> keys *
yaya
20.0.0.102:6379[1]> select 0
OK
20.0.0.102:6379> keys *
ky1
name
bye
比如FLUSHALL命令可以清空一个Redis实例中所有数据库中的数据:
20.0.0.102:6379> FLUSHALL
OK
20.0.0.102:6379> keys *
20.0.0.102:6379> select 1
OK
20.0.0.102:6379[1]> keys *
20.0.0.102:6379[1]> select 2
OK
20.0.0.102:6379[2]> keys *
20.0.0.102:6379[2]>
到此结束,感谢浏览~