非关系型数据库------Redis
解释:指的是这一类的数据库的存储方式不在是以表的形式来进行的,每一个数据库都是有自己的数据存储和表示方式====>非关系型数据库
一.NOSQL概述
1.NOSQL:不仅仅是SQL,泛指非关系型数据库,是对关系型数据库的一个有力补充,虽然非关系型数据库对于数据的存储组织形式不一样,但是保存数据的格式都是以键值对的形式来存在---->键名/值,例:
redis: name "tom" age 19
mongodb:name:"张三" age:18
2.名词解释:
key-value:键值对
RDBMS:关系型数据库管理系统
DBS:数据库系统
3.redis概述
redis:远程字典服务,是开源,基于内存(数据是直接存储在内存中),跨平台(可以在多个操作系统中使用)的非关系型Key-value数据库。
4.redis数据库的特征:
4.1redis数据库是直接加载到内存中,而内存又可以直接和CPU做交互,所以redis数据库的读写出来速度占很大优势
4.2redis数据库支持的数据类型比较丰富,以及和数据类型相关的操作命令也是比较完善的
4.3对第一点的补充,数据的读写处理速度快
4.4redis数据库支持事务的操作(指的是在当前数据库中一次性做的并行处理的操作,比如:一次性执行多条数据库语句),所有的操作都具备原子性-->对数据的操作要么全部执行,要么全部取消(失败)
4.5redis数据库具备持久化功能:利用生成的持久化文件避免因为异常操作引发数据丢失,可以实现数据的备份与恢复
4.6redis数据库可以对键值对数据设置有效时间,一旦超过了有效时间,就会被系统给删除
4.7redis技术也能和大部分的开发语言做配合使用
5.redis和mysql的对比
5.1mysql属于关系型数据库,redis是属于非关系型数据库
5.2mysql是把数据存储在磁盘中,redis是把数据直接存储在内存中
5.3mysql数据库偏向于存数据,redis数据库偏向于读取数据
二.Redis数据库的配置
1.redis数据库服务启动
2.redis数据库的连接
3.redis数据库自带16个库,供操作者来使用,库的编号:【0-15】
默认连接到的是0号库,切换数据库:select 库编号
127.0.0.1:6379> select 5
OK
127.0.0.1:6379[5]> select 14
OK
===========================================================
Redis数据库的操作:
一.redis数据库的增删改查
1.删除当前数据库中的所有数据(键) flushdb
127.0.0.1:6379> flushdb
OK
2.删除所有数据库中的数据(键) flushall
127.0.0.1:6379> flushall
OK
3.创建或者增加键值对数据
set 键名 值
127.0.0.1:6379> set name "tom"
OK
127.0.0.1:6379> set age 18
OK
4.获取数据
get 键名
127.0.0.1:6379> get age
"18"
127.0.0.1:6379> get name
"to
5.修改键的值(对键进行重新赋值)
set 键名 新的值
127.0.0.1:6379> set age 20
OK
127.0.0.1:6379> get age
"20"
6.删除键值对数据
del 键名
127.0.0.1:6379> del age
(integer) 1
127.0.0.1:6379> get age
(nil) ---->未知的结果
二.Redis数据库中Keys命令的操作 Key 键
1.exists 键名 查看一个键是否存在
127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists age
(integer) 0
2.type 键名 查看该键的数据类型
127.0.0.1:6379> type name
string ---->字符串
127.0.0.1:6379> set age 23
OK
127.0.0.1:6379> type age
string
3.keys 字符模板 查看和该模板相关的键名
* 任意,所有的意思
127.0.0.1:6379> keys * ---->查看所有的键
1) "age"
2) "name"
127.0.0.1:6379> set name01 "zhangsan"
OK
127.0.0.1:6379> set name02 "lisi"
OK
127.0.0.1:6379> set sdept "Testing"
OK
127.0.0.1:6379> keys *
1) "name01"
2) "name02"
3) "sdept"
4) "name"
5) "age"
127.0.0.1:6379> keys *e*
1) "name01"
2) "name02"
3) "sdept"
4) "name"
5) "age"
127.0.0.1:6379> keys na*
1) "name01"
2) "name02"
3) "name"
4.randomkey 随机返回一个存在的键
127.0.0.1:6379> randomkey
"name"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"name02"
5.rename 旧键名 新键名 对键名进行重命名操作
需求:把name01---->newname
127.0.0.1:6379> rename name01 newname
OK
127.0.0.1:6379> keys *
1) "name02"
2) "sdept"
3) "name"
4) "age"
5) "newname"
127.0.0.1:6379> get newname
"zhangsan"
6.dbsize 统计当前数据库中键的总个数
127.0.0.1:6379> dbsize
(integer) 5
7.expire 键名 时间 设置键的活动时间(s)
8.ttl 键名 获取一个键的活动时间
127.0.0.1:6379> expire newname 20
(integer) 1
127.0.0.1:6379> get newname
"zhangsan"
127.0.0.1:6379> ttl newname
(integer) 1
127.0.0.1:6379> ttl newname
(integer) -2
127.0.0.1:6379> get newname
(nil)
9.move 键名 库编号 移动键到指定的数据库
127.0.0.1:6379> move sdept 5
(integer) 1
127.0.0.1:6379> keys *
1) "name"
2) "age"
127.0.0.1:6379> select 5
OK
127.0.0.1:6379[5]> keys *
1) "sdept"
127.0.0.1:6379[5]> get sdept
"Testing"
127.0.0.1:6379[5]> flushall
OK
127.0.0.1:6379[5]> keys *
(empty list or set)
127.0.0.1:6379[5]> select 0
OK
127.0.0.1:6379> keys *
(empty list or set)
10.set 键名 值 ex 时间 在设定键值对的同时进行失效时间的设置
127.0.0.1:6379> set cname "test" ex 30
OK
127.0.0.1:6379> get cname
"test"
127.0.0.1:6379> ttl cname
(integer) 17
127.0.0.1:6379> keys *
1) "cname"
127.0.0.1:6379> ttl cname
(integer) 2
127.0.0.1:6379> get cname
(nil)
11.exit 退出客户端的连接
127.0.0.1:6379> exit
d:\redis>
12.info 显示redis数据库服务器信息
127.0.0.1:6379> info
# Server
redis_version:3.0.503
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:d14575c6134f877
redis_mode:standalone
os:Windows
arch_bits:64
multiplexing_api:WinSock_IOCP
process_id:17464
run_id:fe86184836b516899883cf12d4f48164d46423c5
tcp_port:6379
uptime_in_seconds:3518
uptime_in_days:0
hz:10
lru_clock:12161214
config_file:d:\redis\redis.windows.conf
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:692104
used_memory_human:675.88K
used_memory_rss:654320
used_memory_peak:692672
used_memory_peak_human:676.44K
used_memory_lua:36864
mem_fragmentation_ratio:0.95
mem_allocator:jemalloc-3.6.0
三.Redis数据类型以及相关命令的操作
Ⅰ.字符串类型-->string 是redis数据库基本的,如果没有特殊指定数据类型(列表,set集合,哈希集合,有序集合),默认的数据都会把它看成是字符串类型。
redis中实现对字符串操作的命令:
set 键名 值 创建键值对
get 键名 获取键中的值
1.mset 键名1 值1 键名2 值2 键名3 值3....
批量向数据库中插入多个键值对的数据
127.0.0.1:6379> mset sno 101 sname "zhangsan" ssex "boy" sage 20
OK
127.0.0.1:6379> keys *
1) "sage"
2) "ssex"
3) "sname"
4) "sno"
127.0.0.1:6379> get sname
"zhangsan"
127.0.0.1:6379> get sno
"101"
127.0.0.1:6379> type sno
string
127.0.0.1:6379> type sname
string
2.mget 键名1 键名2 键名3... 获取多个键的值
127.0.0.1:6379> mget sno sname sage
1) "101"
2) "zhangsan"
3) "20"
3.getset 键名 新值 先显示键中的值,再对键进行重新赋值操作
127.0.0.1:6379> getset sage 23
"20"
127.0.0.1:6379> get sage
"23"
4.setnx 键名 值 添加新的键值对,如果该键存在,则什么都不会做
127.0.0.1:6379> setnx sdept "testing"
(integer) 1
127.0.0.1:6379> keys *
1) "sage"
2) "sdept"
3) "ssex"
4) "sname"
5) "sno"
127.0.0.1:6379> setnx sname "lisi"
(integer) 0
127.0.0.1:6379> get sname
"zhangsan"
5.msetnx 键名1 值1 键名2 值2....
添加多个新的键值对,如果存在,什么都不做
127.0.0.1:6379> msetnx sname "wangwu" grade 96
(integer) 0
127.0.0.1:6379> keys *
1) "sage"
2) "sdept"
3) "ssex"
4) "sname"
5) "sno"
127.0.0.1:6379> get sname
"zhangsan"
127.0.0.1:6379> msetnx cno "c01" grade 80
(integer) 1
127.0.0.1:6379> keys *
1) "grade"
2) "sage"
3) "sdept"
4) "ssex"
5) "cno"
6) "sname"
7) "sno"
127.0.0.1:6379> mget cno grade
1) "c01"
2) "80"
6.setex 键名 时间 新值 修改键的值,并设定有效时间
127.0.0.1:6379> setex grade 35 60
OK
127.0.0.1:6379> get grade
"60"
127.0.0.1:6379> ttl grade
(integer) 18
127.0.0.1:6379> ttl grade
(integer) 8
127.0.0.1:6379> get grade
(nil)
7.incr 键名 对键中的值(数字)进行加1的操作
127.0.0.1:6379> get sage
"23"
127.0.0.1:6379> incr sage
(integer) 24
127.0.0.1:6379> get sage
"24"
127.0.0.1:6379> incr sage
(integer) 25
127.0.0.1:6379> get sage
"25"
8.incrby 键名 数值 将键中的值(数字)进行指定数值的增加
127.0.0.1:6379> incrby sage 5
(integer) 30
127.0.0.1:6379> get sage
"30"
9.decr 键名 将键中的值进行减1的操作
10.decrby 键名 数值 将键中的值进行指定数值的减少
127.0.0.1:6379> decr sage
(integer) 29
127.0.0.1:6379> get sage
"29"
127.0.0.1:6379> decrby sage 10
(integer) 19
127.0.0.1:6379> get sage
"19"
11.append 键名 新值 将新的值拼接在原始键中的值后方
127.0.0.1:6379> keys *
1) "sage"
2) "sdept"
3) "ssex"
4) "cno"
5) "sname"
6) "sno"
127.0.0.1:6379> get sdept
"testing"
127.0.0.1:6379> append sdept 2105
(integer) 11
127.0.0.1:6379> get sdept
"testing2105"
12.substr 键名 开始位置的下标 结束位置的下标 字符串截取操作
下标=位置-1
127.0.0.1:6379> get sdept
"testing2105"
127.0.0.1:6379> substr sdept 4 7
"ing2"
13.setrange 键名 位置下标 新值 得到一个新的字符串(从指定位置开始,把新的值替换掉旧的值,替换的长度取决于新值的长度)
127.0.0.1:6379> get sdept
"testing2105"
127.0.0.1:6379> setrange sdept 4 ers
(integer) 11
127.0.0.1:6379> get sdept
"testers2105"
127.0.0.1:6379> setrange sdept 7 testing
(integer) 14
127.0.0.1:6379> get sdept
"testerstesting"
14.getrange 键名 开始位置的下标 结束位置的下标 截取查看操作
127.0.0.1:6379> get sdept
"testerstesting"
127.0.0.1:6379> getrange sdept 7 11
"testi"
15.strlen 键名 统计键中存储的字符串长度
127.0.0.1:6379> strlen sdept
(integer) 14