目录
一、关系数据库与非关系型数据库
关系型数据库
●一个结构化的数据库,创建在关系模型基础上
●一般面向于记录
●包括
Oracle、MySQL、SQL Server、Microsoft Access、DB2等
非关系型数据库
●除了主流的关系型数据库外的数据库,都认为是非关系型
●包括
Redis、MongBD、Hbase、CouhDB等
1.1、非关系型数据库产生背景
●High performance——对数据库高并发读写需求
●Huge Storage———对海量数据高效存储与访问需求
●High Scalability && High Availability———对数据库高可扩展性与高可用性需求
二、Redis简介
Redis基于内存运行并支持持久化
采用key-value(键值对)的存储形式
优点
●具有极高的数据读写速度
●支持丰富的数据类型
●支持数据的持久化
●原子性
●支持数据备份
2.1、Redis安装部著
1)操作步骤
2)编译安装Redis
[root@localhost ~]# tar zxvf redis-5.0.7.tar.gz
[root@localhost ~]# yum -y install gcc gcc-c++
[root@localhost ~]# cd redis-5.0.7/
[root@localhost redis-5.0.7]# make prefix=/usr/local/redis install
- 设置Redis相关配置文件
按回车继续就可以了
3)Redis配置文件
配置参数(/etclredis/6379.conf)
bind: 监听的主机地址
port:端口
daemonize yes:启用守护进程
pidfile:指定PID文件
loglevel notice:日志级别
logfile:指定日志文件
三、Redis数据类型
Redis支持五种数据类型: string (字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)
1)String (字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key 对应一个value.
string类型是二进制安全的。redis的string 可以包含任何数据。比如jpg图片或者序列化的对象。
string类型是Redis最基本的数据类型,string类型的值最大能存储512MB。
20.0.0.38:6379> set name zhangsan
OK
20.0.0.38:6379> get name
"zhangsan”
2)Hash(哈希字典)
Redis hash是一个键值(key=>value)对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
每个hash可以存储2的32次方-1键值对。
//作用场景:
键值对集合,即编程语言中的Map类型
适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值
20.0.0.38:6379> hmset stu name lisi age 18 sex 男
oK
20.0.0.38:6379> hget stu name
"lisi"
20.0.0.38:6379> hget stu age
"18”
20.0.0.38:6379> hget stu sex
//--raw解决中文乱码问题
[root@localhost utils]# redis-cli -h 20.0.0.38 -p 6379 --raw
20.0.0.38:6379> hget stu sex
男
3)List(列表)
Redis列表是简单的字符串列表,按照插入顺序排序,可以重复。可以添加一个元素到
列表的头部(左边)或者尾部(右边)。列表最多可存储2的32次方-1元素。
//作用场景:
增删快,提供了操作某一段元素的API 1,最新消息排行等功能(比如朋友圈的时间线)⒉,消息队列
20.0.0.38:6379> lpush hobby play
1
20.0.0.38:6379> lpush hobby read
2
20.0.0.38:6379> lpush hobby sport
3
20.0.0.38:6379> lrange hobby 0 10
sport
read
play
4)Set(集合)
Redis 的Set是string类型的无序集合。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
//作用场景:
1、共同好友2、利用唯一性,统计访问网站的所有独立ip3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐
sadd命令
添加一个string元素到key对应的set集合中,成功返回1,如果元素已经在集合中返回0。
20.0.0.38:6379> sadd color red green yellow
3
20.0.0.38:6379> smembers color
red
yellow
green
20.0.0.38:6379> sadd color red
0
5)zset(sorted set:有序集合)
Redis zset和set一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序.
zset的成员是唯一的,但分数(score)却可以重复。
//作用场景:
将Set中的元素增加一个权重参数score,元素按score有序排列
数据插入集合时,已经进行天然排序 1、排行榜2、带权重的消息队列
zadd命令
添加元素到集合,元素在集合中存在则更新对应score
示例:
20.0.0.38:6379> zadd color 0 red
1
20.0.0.38:6379> zadd color 0 blue
1
20.0.0.38:6379> zadd color 1 green
1
20.0.0.38:6379> zadd color 1 yellow
1
20.0.0.38:6379> zrangebyscore color 0 10
blue
red
green
yellow
四、Redis数据库常用命令
1)redis-cli命令行工具
连接本地数据库
[root@localhost utils]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> ###这就连接进去了
连接远程数据库
[root@localhost utils]# redis-cli -h 20.0.0.38 -p 6379
20.0.0.38:6379>
set:存放数据
20.0.0.38:6379> set name zhangsan
OK
get:获取数据
20.0.0.38:6379> get name
"zhangsan”
2)key相关命令
keys:获取符合规则的键值列表
20.0.0.38:6379> KEYS *
color
score
sex
age
exists:判断键值是否存在
20.0.0.38:6379> set name zhangsan
oK
20.0.0.38:6379> exists name
1
20.0.0.38:6379> exists names
0
del:删除当前数据库的指定keyo
type:获取key对应的value值类型
20.0.0.38:6379> lpush color red blue
2
20.0.0.38:6379> TYPE color
list
20.0.0.38:6379> set name zhangsan
oK
20.0.0.38:6379> TYPE name
string
rename(覆盖) / renamenx(不覆盖):对已有的key进行重命名
20.0.0.38:6379> rename name na
oK
20.0.0.38:6379> get na
zhangsan
dbsize:查看当前数据库中key的数目