Redis

Redis

数据库持久化主要是面向磁盘,读写速度很慢.
NOSQL: 简易型的数据库面向内存存储,内存每秒 1.06G/S  30~40m/s!并提供了一种持久化的功能
Redis和MongoDB是当前比较流行的NoSQL数据库.
Redis的性能每秒中的十几万次的读写,并支持集群,分布式,主从同步等!
Redis的性能 : 
	1. ANSI C语言编写的,跟接近于汇编,更接近机器语言,运行速度快
	2. 内存读/写,速度自然比数据库的磁盘读/写快.
	3. 数据库结构只有6种,比数据库结构简单,因此规则少.


作用:
	1. 缓存
		1. 业务数据是否经常用? 命中率如何?如果命中率很低就没必要放缓存了.
		2. 该业务数据是读的操作多,还是写的操作多选,如果写的操作多,也没必要使用缓存
		3. 存储缓存的业务数据大小如何?例如几百兆字节的数据也没有必要.
	2. 接近并发的削峰
	3. 生产和消费者模式开发
	4. 分布式开发

Reids/memcached(缓存) :
	1. Redis可以用来存储(storage),而 memcached是用来做缓存的(cache)
	2. 存储的数据结构,memcached只支持一种存储类型"字符串"而Redis可以存储字符串,链表,哈希结构,集合,有序集合等

Redis/MongoDB:
	1. MongoDB支持查询,是一个文档数据库,Redis:key-value数据库,不支持查询

Redis

概念 : redis是一款高性能的NOSQL系列的非关系数据库.

1. 什么是NOSQL?
	NOSQL(not only SQL)不仅仅是SQL,,NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。

1.1 NOSQL和关系型数据库的比较:
	优点 : 
	1.1.1 成本 : NOSQL数据库部署简单,基本都是开源软件,不需要像Oracle那样花费大量成本购买,相比关系型数据库更价格便宜
	1.1.2 查询速度 : nosql数据库将数据存储于缓存中(内存),关系数据库数据存储在硬盘中,自然查询速度要比关系型块
	1.1.3 存储数据格式 : NOSQL的存储格式是key,value形式,文档形式,图片形式等. 所以可以存储基础类型以及对对象或集合等各种格式,而数据库只支持基础类型
	1.1.4 扩展性 : 关系型数据库有类似join这样的多表查询机制,扩展很难
	缺点 : 
		维护工具较少,因为NOSQL是属于新技术,不能和关系数据库比.
		不提供SQL支持,如果不支持SQL这样的工业标准,必须让用户从新学习
		不提供关系型数据库的事务处理 

主流的NOSQL :
	键值(Key-Value)存储数据库
				相关产品: Tokyo Cabinet/Tyrant、Redis、Voldemort、Berkeley DB
				典型应用: 内容缓存,主要用于处理大量数据的高访问负载。 
				数据模型: 一系列键值对
				优势: 快速查询
				劣势: 存储的数据缺少结构化
	文档型数据库
				相关产品:CouchDB、MongoDB
				典型应用:Web应用(与Key-Value类似,Value是结构化的)
				数据模型: 一系列键值对
				优势:数据结构要求不严格
				劣势: 查询性能不高,而且缺乏统一的查询语法
	图形(Graph)数据库
				相关数据库:Neo4J、InfoGrid、Infinite Graph
				典型应用:社交网络
				数据模型:图结构
				优势:利用图结构相关算法。
				劣势:需要对整个图做计算才能得出结果,不容易做分布式的集群方案。
	列存储数据库
				相关产品:Cassandra, HBase, Riak
				典型应用:分布式的文件系统
				数据模型:以列簇式存储,将同一列数据存在一起
				优势:查找速度快,可扩展性强,更容易进行分布式扩展
				劣势:功能相对局限

1.3 什么是Redis
		Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
			1) 字符串类型 string
			2) 哈希类型 hash
			3) 列表类型 list
			4) 集合类型 set
			5) 有序集合类型 sortedset
			6) 图
			 bitmaps, hyperloglogs....
		1.3.1 redis的应用场景
			•	缓存(数据查询、短连接、新闻内容、商品内容等等)
			•	聊天室的在线好友列表
			•	任务队列。(秒杀、抢购、12306等等)
			•	应用排行榜
			•	网站访问统计
			•	数据过期处理(可以精确到毫秒
			•	分布式集群架构中的session分离


make 编译
make install 安装
tar -zxvf 
mkdir -p /user/local/redis
vi 编辑文本


redis-benchmark   : redis性能 测试工具
redis-check-aof  : 检查AOF的日志工具
redis-check-rdb  : 数据文件检查
redis-cli  		:连接使用的客户端
redis-sentinel  : 软连接
redis-server	:redis的服务进程


redis-server 配置文件 根据指定的配置文件启动redis服务
redis-cli 登录本机默认端口的服务器
redis-cli -h 指定远程服务器地址 -p 端口号 -a 密码
config get requirepass : 查看redis的认证密码
127.0.0.1:6379> config set requirepass 123456
OK
auth 密码 登录认证
127.0.0.1:6379> config set requirepass ""	清空认证密码
OK

Redus对key的操作命令

get key 获取指定可以的值
keys pattern 查询对应的key
	有个通配符 ?,*,[]
	* : 任意多个字符
	? : 任意单个字符
	[] : 匹配中括号中的任意一个字符

set
rename : 给指定的key修改成新的key
renamenx : 修改成功返回 1否则 0
move : 将指定的key移动到指定的数据库中
select 切换数据库 0~15(16)
ttl	
作用 : 查询key的生命周期
返回 : 秒数
对于不存在的返回-2,永久存在的-1	

del : 删除指定的key  
type : 返回指定key的类型
randomkey : 返回随机的key
exists 
	查看指定的key是否存在  1/0
expire 
作用 : 设置key的生命周期,单位是秒
pexpire : 设置毫秒
pttl : 查看毫秒
persist :将指定的key设置永久存在

Redis字符串类型的操作

set key value [ex 秒数]/[px 毫秒] [nx]/[xx]
ex : 设置有效期的秒数
px : 设置有效期的毫秒数
nx : 如果key已经存在就不会添加(不执行操作),不存在就添加
xx : 如果key存在就覆盖(执行操作),不存在就不执行

mset :一次性添加多个key-value
mget : 一次性获取多个
setrange key offset value : 将offset位置的值替换成功value
append : 追加
getrange key start stop : 字符串截取
	start <= stop : 否则返回空字符串
	字符串下标 左边从0开始 ,右边从-1开始
getset : 返回旧值,设置新值
incr key
incrby key number
decr key
decrby key number
incrbyfloat key number

link 链表结构

lpush key value
rpop key
lrange key start stop
lrem key count value
ltrim key count value
lindex key index
llen key 
linsert key after|before search value 
rpoplpush source dest
brpop,blpop key timeout 

set集合:唯一,无序

sadd value1 value2 value3 添加
srem value1 value2 删除指定的值
spop key 返回并删除集合中的一个随机元素
sandmember key 返回集合中的一个随机元素
sismemeber key value 判断value是否在key的集合中存在
smembers key 返回集合中的所有元素
scard key 返回集合中的所有元素个数
smove source desc value 把 source中value删除,并添加到desc集合中
sinter key1 key2 key3 交集,并返回数据
sinterstore dest key1 key2 key3 将key1,key2,key3三个集合中的交集赋值给dest
suion key1 key2 key3 求出并集并返回
sdiff key1 key2 key3 差集

order set 有序集合

zadd key score1 value1 score2 value2  向有序集合中添加值 先分数然后关键字
zadd students 118 lisi 56 zhangsan 96 lilei 66 hanmeimei 
zrevrange students 0 -1 降序 降序展示所有数据
zadd students ch score memeber 修改已有的数据
zrem key value1 value2   删除指定名称的内容
zremrangebyscore key min max : 删除区间内的所有元素  0 100
zremrangebyrank key start end 按照名次删除  删除小的
zrank key member 查询member的排名(升序0开始)
zrevrank key member 查询member的排名(降序0开始)
zrange key start stop 把集合排序后安装升序展示
zcard students 查询集合中的数量
zrangebyscore key min max limit offset count 展示区间中指定位置的元素

Hash 哈希数据

hset
hmset
hget
hmget
hgetall
hdel
hlen
hexists
hkeys 
hvals 

Redis中的事务

开启		start transaction		muitl
语句		sql语句					普通命令
失败		rollback 				discard
成功		commit					exec

rollback和discard的区别
	如果已经成功执行了2条语句,第3条出错rollback后,前2条的操作影响消失
	discard只是结束本次事务,前两条语句造成的影响还在.

	1 语法问题:
		这种exec时,报错,所有语句不能执行
	2 语句本身没有错误,当时操作的对象错了,比如 zadd操作list对象exec后,会执行正确的语法,并跳过不适合的语句.

思考:
	我正在买票
tickt-1 , money -100
而票只有一张,如果我muitl之后,和exec之前,票被别人买了....tickt变成0了
我该如果观察这种情景,并不再提交.

悲观的想法:
	世界充满了危险,肯定有人和我抢,给tickt上面加锁,只有我能操作[悲观锁]
乐观的想法:
	没有那么多人和我抢,因此,我只需要注意--有没有人更改tickt的值就可以了[乐观锁]

watch key
	作用 : 监听 key 有没有变化,如果有变化就取消事务

Redis的事务中,启用的是乐观锁,只负责监测key有没有被改动


消息订阅:
创建一个订阅端:订阅频道
发布端 : 发布内容

redis主从同步

slaveof host port
	同步host主机的redis数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值