Redis
一种可基于内存亦可持久化的 Key-Value 数据库,NoSql 一种非关系型数据库,在
NoSQL 数据库中数据之间是无联系的,无关系的。数据的结构是松散的,可变的.
redis 的主业目前是基于键值对的数据存储、缓存等,消息队列可能是 redis
对 的一种尝试
Redis 的数据存储在内存中,内存是瞬时的,如果 linux 宕机或重启,又或者 Redis 崩溃
或重启,所有的内存数据都会丢失,为解决这个问题,Redis 提供两种机制对数据进行持
久化存储,便于发生故障后能迅速恢复数据。
(1)一种是通过RDB方式
优点:由于存储的是数据快照文件,恢复数据很方便,也比较快
缺点:
1)会丢失最后一次快照以后更改的数据。如果你的应用能容忍一定数据的丢失,那么
使用rdb是不错的选择;如果你不能容忍一定数据的丢失,使用 rdb 就不是一个很好的选
择。
2)由于需要经常操作磁盘,RDB 会分出一个子进程。如果你的 redis 数据库很大的话,
子进程占用比较多的时间,并且可能会影响 Redis 暂停服务一段时间(millisecond 级别
),
如果你的数据库超级大并且你的服务器 CPU 比较弱,有可能是会达到一秒。
(2) 另一种是通过 AOF 方式
优点: 1易扩展 2大数据量,高性能 3灵活的数据模型 4高可用 5 低成本
N oSQ L 数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益
于它的无关系性,数据库的结构简单。关系型数据库(例如 M ySQ L)使用查询缓存。
这种查询缓存在更新数据后,缓存就是失效了。在频繁的数据读写交互应用中。 缓存的
性能不高。N oSQ L 的缓存性能要高的多。
M ySQ L 和 N oSQ L 都有各自的特点和使用的应用场景,两者结合使用。让关系数据库
关注在关系上,N oSQ L 关注在存储上。
Redis的5中数据类型
(1)字符串类型 string 设值 set key value 获取 get key
(2)哈希类型 hash 设值 hset key value 获取 hget key
(3)列表 list 设值 lpush key value[value....] 获取 lindex key index index 为获取
列表 key 中下标为指定 index 的元素,列表元素不删除,只是查询。
移除 lpop key语法:lpop key
作用:移除并返回列表 key 头部第一个元素,即列表左侧的第一个下标值。相当于栈
(stack)
返回值:列表左侧第一个下标值; 列表 key 不存在,返回 nil
rpop key 移除并返回列表 key 尾部第一个元素
(4)集合类型 set 设值 sadd key member [member…] 获取
语法:smembers key
作用:获取集合 key 中的所有成员元素,不存在的 key 视为空集合
srem 删除
语法:srem key member [member…]
作用:删除集合 key 中的一个或多个 member 元素,不存在的元素被忽略。
返回值:数字,成功删除的元素个数,不包括被忽略的元素。
(5)有序集合类型 zset
设值:
语法:zadd key score member [score member…]
作用:将一个或多个 member 元素及其 score 值加入到有序集合 key 中,如果
member存在集合中,则更新值;score 可以是整数或浮点数
返回值:数字,新添加的元素个数
获取:
zrange
语法:zrange key start stop [WITHSCORES]
作用:查询有序集合,指定区间的内的元素。集合成员按 score 值从小到大来排序。
start,stop 都是从 0 开始。0 是第一个元素,1 是第二个元素,依次类推。以 -1 表示最
后一个成员,-2 表示倒数第二个成员。WITHSCORES 选项让 score 和 value 一同返回
。
返回值:自定区间的成员集合
zrevrange
语法:zrevrange key start stop [WITHSCORES]
作用:返回有序集 key 中,指定区间内的成员。其中成员的位置按 score 值递减(从大到
小)来排列。其它同 zrange 命令。
返回值:自定区间的成员集合
Redis中还有一个发布和订阅
A 、 publish 发布消息
语法: publish chanel message
作用: 将 message 消息发送到 channel 频道。 message 是要发送的消息, channel
是自定
义的频道名称(例如 cctv1 ,cctv5),唯一标识发布者。
返回值:数字。接收到消息订阅者的数量
B 、 subscribe 订阅频道
语法:subscribe channel [channel…]
作用:订阅一个或多个频道的信息
返回值:订阅的消息
C 、 psubscribe 订阅使用统配符的一组频道
语法:psubscribe pattern [pattern]
作用:订阅一个或多个符合给定模式的频道。 模式以 * 作为通配符,比如 it* 匹配所有以
it 开头的频道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有以 news.开头的
频道( news.it 、 news.global.today 等等)
返回值:订阅的信息
D 、 unsubscribe 退订频道
语法:unsubscribe channel [channel]
作用:退出指定的频道,不订阅。
返回值:退订的告知消息
Redis的事务:
Redis存在事务,但不完整。不存在语法错误时,可以在exec后回滚,反之,
脑补。
--------------------------------------------
Redis集群 主从复制 避免单点故障,导致数据丢失
安全设置 可以设置密码 还能设定特殊ip可访问
在java中操作用的是jedis这个jar包