1. 关系型数据库和非关系型数据库
1.1 关系型数据库-sql
- 操作数据必须要使用sql语句
- 数据存储在磁盘
- 存储的数据量大
- 举例:mysql、oracle、sqlite(文件数据库)、sql server
1.2 非关系型数据库-nosql
- 操作不适用sql语句,使用命令
- 数据默认存储在内存:速度快;效率高;存储的数据量小
- 不需要数据库表:以键值对的方式存储的
1.3 二者的联系
在实际项目开发中,关系型数据库和非关系型数据库往往组合使用,发挥其各自的优势。
- 所有的数据默认存储在关系型数据库中
- 客户端访问服务器,有一些数据,服务器需要频繁的查询
- 服务器首先将数据从关系型数据库中读出->第一次,将数据写入到redis
- 客户端第二次
- 涉及到数据的修改,需要同步redis和关系型数据库中的数据->服务器完成
2. Redis
2.1 Redis简介
Redis是一个高性能的Key-Value数据库,它默认将数据存储在内存中,实现数据的高效存取,通常作为缓存使用。
- redis中数据的组织格式:键值对
- key:必须是字符串-“hello”
- value:可选的(String、List、Set、Hash )
- redis常用的数据类型
- String类型-字符串
- List类型-存储多个字符串的
- Set类型-元素不重复,数据是无序的(区别于STL中的set)
- SortedSet-排序Set,集合中的每个元素分为两部分[分数,成员]->[66, “tom”],默认按照分数升序排列
- Hash类型-key-value的数据组织方式,查询快
2.2 Redis常用命令
redis-server
:默认方式启动redis服务器
redis-server [confFileName]
:根据配置文件的设置启动redis服务器
redis-cli
:启动redis客户端并默认连接本机服务器,默认绑定6379端口
redis-cli -p [端口号]
:连接本机指定端口的redis
redis-cli -h [IP地址] -p [端口号]
:连接远程主机的指定端口的redis
ping [MSG]
:检测客户端是否连接上服务器
shutdown
:通过客户端关闭redis服务器
key -> string
value -> string
# 1.设置一个键值对->string-string
set key value
# 2.通过key得到value
get key
# 3.同时设置一个或多个key-value对
mset key value [key value ...]
# 4.返回所有(一个或多个)给定key的值
mget key [key ...]
# 5.追加
# 如果key已经存在并且是一个字符串,append命令将value追加到key原来的值的末尾
# 如果key不存在,append就简单地将给定key设为value,就像执行 set key value 一样。
append key value
strlen key
:返回key所存储的字符串的长度
decr key
:将key中存储的数字值减一,前提:value必须是数据字符串,例如“123”
incr key
:将key中存储的数字值加一,前提同上
decrby key cout decrement
:将key所存储的值减去减量decrement
incrby key increment
:将key所存储的值加去增量increment
# key-> string
# value -> list
# 1.将一个或多个 value 插入到列表 key 的表头
# 如果由多个value值,那么各个value值按从左到右的顺序依次插入到表头
# 如果key不存在,一个空列表会被创建并执行lpush操作
lpush key value [value ...]
# 2.将一个或多个 value 插入到列表 key 的表尾(最右边)
rpush key value [value ...]
# 3.list中删除元素
# 删除最左侧元素
lpop key
# 删除最右侧元素
rpop key
# 4.遍历 start->起始位置,0 stop->结束位置,-1 -2 -3...
lrange key start stop
# 5.通过下标得到对应位置的字符串
lindex key index
llen
:返回列表key的长度
lpushx key value
:将value插入到列表key的表头,当且仅当key存在并且是一个列表
rpushx key value
:将value插入到列表key的表尾,当且仅当key存在并且是一个列表
lrem key count value
:根据count的值,移除列表中与参数value相等的元素。count > 0,从表头开始搜索,移除count个与value值相等的元素;count < 0, 从表尾开始搜索,移除count的绝对值个与value值相等的元素;count = 0,移除表中所有与value相等的元素
# key-> string
# value -> set类型 { "string1", "string2" ...}
# 1.将一个或多个member元素加入到集合key当中,已经存在与集合的member元素将被忽略(不可重复)
# 加入key不存在,则创建一个只包含member元素作成员的集合
# 当key不是集合类型时,返回一个错误
sadd key member [member ...]
# 2.遍历
smembers key
# 3.差集
sdiff key [key ...]
# 4.交集
sinter key [key ...]
# 5.并集
sunion key [key ...]
# 6.删除
# 移除集合key中的一个或多个member元素,不存在的member元素会被忽略
srem key member [member ...]