关系型(用SQL)
oracle
mysql
sql server
sqlite
使用SQL
数据的组织形式:
表 -- 行和列的集合
确保数据持久化到硬盘上
非关系型(NoSQL)
No only sql
redis
memcached
mongodb
不是SQL操作数据库,使用自己一套命令API
大部分都是内存型
持久化程度没有关系型数据库高,一些对数据安全看中的企业不使用
也不支持事务(ACID)
数据组织形式: 键值对 key-value
优势:读写效率高
redis配合关系型数据库的使用
请求1 从关系型数据库中读取数据
判断是否频繁读写的数据
是
存到redis
否
没操作
请求2 首先看一下redis有没有数据,有就读取返回
存一些临时数据
redis优点
redis 有三个主要使其有别于其它很多竞争对手的特点:
1)redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久性目的
2)redis相比许多键值数据存储系统有相对丰富的数据类型
3)redis可以将数据复制到任意数量的从服务器中
redis安装和启动
安装
解压源代码
make
sudo make install
启动redis服务
redis-server
redis-cli
redis-cli -h 127.0.0.1 -p 6379
退出客户端
quit/exit/ctrl d
测试服务端连通
ping
服务器回pong
ping hello
服务器回 hello
关闭服务器
客户端使用shutdown命令
文档地址:http://www.redis.cn/
文档地址:https://download.csdn.net/download/u014749668/10645216
redis 类型
redis存储数据都是使用键值对 key-valu
key - 字符串
value 可以是以下类型
字符串string 是redis里边唯一一个基础类型
mysql - > int double
redis类型 含义
String 字符串
Hash 字典.
List 列表.
Set 集合
Sorted Set 有序集合
Pub/Sub 订阅
5 字符串
set/get
set key value
get key
mset/mget m -- multi
mset key1 val1 key2 val2 ...
mget key1 key2 ...
append
追加,在本来的字符串后面再追加一段
append key str
incr/decr
increase / decrease
自增自减操作
只能用于整数的字符串,浮点也不行
incr key
incrby/decrby
增加/减少相应数值
incryby key n
setnx
nx - not exists
只有当某个key不存在的时候才会设置
setnx key value
6 列表
复合类型的成员都是string
不能 list <list>
list -> std::list
lpush/lpop
压栈出栈
lpush key mem1 mem2 ...
lpop key
rpush/rpop
r - reverse 反向
lrange
查看list范围内的所有成员
lrange key 0 -1
负数表示倒数第几个
lindex
下标取值
lindex key i
llen
获取长度
lpushx
当key存在并且是列表的情况下才push
lpushx key mem
栈和队列
栈:FILO 第一个进最后一个出
同一个方向push 和 pop操作
lpush - lpop
rpush - rpop
队列: FIFO 先进先出
一个方向进,另一个方向出
lpush - rpop
rpush - lpop
7 集合
set - > std::set
不重复,还会自动排序
sadd
sadd key mem1 mem2 ...
smembers
列出成员,自动根据字符串值来排序
smembers key
集合操作
A = {1,2,3}
B = {2,3,4}
交集
sinter key1 key2 ...
大家都有那部分
{2,3}
并集
sunion key1 key2 ...
集合相加,去重
{1,2,3,4}
差集
sdiff key1 key2 ...
分方向,求一个集合相对于另一个集合没有的那部分
A-B : A有B没有的 {1}
B-A : {4}
QQ : 好友推荐
smove
将一个成员从一个集合移动到另一个集合
srem
remove key member [member ...]
sdiffstore destination key [key ...]
sinterstore destination key [key ...]
sunionstore destination key [key ...]
经过集合运算之后,将结果又存到另一个集合
8 有序集合
按照其他条件来排序,不是根据字符串字面值来排序
zadd key score member [score member ...]
score是权重,相当排序条件
zadd z1 5 a 4 b 3 c 2 d
zrange key start end [WITHSCORES]
根据权重从小到大进行排序输出
zrevrange
反向排序输出
9 哈希 hash
hash - std::map
key - value
存对象信息
student
{
name:itcast
age:18
sex:male
}
hset key field value
key 指 redis中key
field hash对应域
value 值(只能是字符串)
hset student name itcast
hget
hget key field
hmset
hmset key field1 val1 field2 val2 ...
hmset student age 18 sex male
hmget
hmget key field1 field2 ...
hkeys student 获取student里面的所有value