Redis是以key-value形式存在,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本的要求(是非关系型的,分布式的,开源的水平可拓展的)
优点:
对数据高并发读写,它是直接缓存在内存里的,所以它是一个内存类型的数据库.
对海量数据的高效率存储和访问
对数据的可拓展性和高可用性
单线程操作(说明他是天生的,比较安全的),每个操作都是原子操作,没有并发相关的问题(但是在redis 6 以后就不是单线程的操作,是多线程了)
缺点:
不支持事务
没有办法太复杂的关系型的数据
redis定位是缓存,提高数据读写速度,减轻对数据库的
应用场景:排行榜.可以以做到实时排行。
redis和memcache的区别,及其优缺点
1、 Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等。
2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘
4、过期策略–memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定,例如expire name 10
5、分布式–设定memcache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从
6、存储数据安全–memcache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)
7、灾难恢复–memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复
8、Redis支持数据的备份,即master-slave模式的数据备份。
redis和memecache的不同在于[2]:
1、存储方式:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做dump)。
2、数据支持类型:
redis在数据支持上要比memecache多的多。
3、使用底层模型不同:
新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4、运行环境不同:
redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上
redis基本操作命令
1、string–体会一下 string应用场景
set key value -> 存入键值对
set name lili
get key -> 根据键取出值
get name
incr key -> 把值递增1
incr age
注意:变量一定要是数值才可以,否则就会报错.
decr key -> 把值递减1
decr age
incrby key num -> 偏移值
incrby age 2
其实就是在age上加多少的意思.
del key -> 根据键删除键值对
del age
setex key timeout value -> 存入键值对,timeout表示失效时间,单位s
setex age 5 12
就是age=12在5秒后就会失效
ttl ->可以查询出当前的key还剩余多长时间过期
ttl name
2、hash–体会一下 hash应用场景
hset key hashkey hashvalue -> 存入一个hash对象
hset user hobby java
hget key hashkey -> 根据hash对象键取去值
hget user hobby
hexists key hashkey -> 判断hash对象是含有某个键
hexists user hobby
hdel key hashkey -> 根据hashkey删除hash对象键值对
hdel user hobby
3、list–体会一下 list应用场景
rpush key value -> 往列表右边添加数据
rpush arr 1
lpush key value -> 往列表左边添加数据
lpush arr 2
lpop key -> 弹出列表最左边的数据
lpop arr
rpop key -> 弹出列表最右边的数据
rpop arr
lrange key start end -> 范围显示列表数据,全显示则设置0 -1
lrange arr 0 -1
llen key -> 获取列表长度
llen arr
4、set–体会一下set应用场景
sadd key value -> 往set集合中添加元素
sadd set1 lili huahua
smembers key -> 列出set集合中的元素
smembers set1
srem key value -> 删除set集合中的元素
srem set1 lili
spop key count -> 随机弹出集合中的元素
spop set1 1
sdiff key1 key2 -> 返回key1中特有元素(差集:sdiff set1 set2返回set1set2不包含的元素)
sdiff set1 set2
sinter key1 key2 -> 返回两个set集合的交集(交集:sinter set1 set2是能特然 返回2个元素都拥有的元素)
sinter set1 set2
sunion key1 key2 -> 返回两个set集合的并集(并集:sunion set set2返回2个集合所有元素,排除重复)
sunion set1 set2
srandmember key count -> 随机获取set集合中元素
srandmember set1 3
5、zset–体会一下zset应用场景
zadd key num name -> 存入分数和名称
zadd str 23 sc
zrange key start end -> 按照分数升序输出名称
zrange str 1,3
zrevrange key start end -> 按照分数降序输出名称
zrevrange str 1,3
zincrby key num name -> 偏移名称对应的分数
zincrby str 3 sc
zrank key name -> 升序返回排名
zrank str sc
zrevrank key name -> 降序返回排名
zrevrank str sc
zcard key -> 返回元素个数
zcard str
redis持久化机制
1、RDB方式 :
【全量】RDB 持久化,是指在指定的时间间隔内将内存中的数据集快照写入磁盘。实际操作过程是,fork 一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
2、AOF方式
【增量】AOF持久化,以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
Monogodb和redis的区别:
- 内存管理
Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。
MongoDB 数据会优先存于内存,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
需要注意的是Redis 和mongoDB特别消耗内存,一般不建议将它们和别的服务部署在同一台服务器上。
- 数据结构
Redis 支持的数据结构丰富,包括hash、set、list等。
MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
- 数据量和性能
当物理内存够用的时候,性能,redis>mongodb>mysql
数据量,mysql>mongodb>redis
注意mongodb可以存储文件,适合存放大量的小文件,内置了GirdFS 的分布式文件系统。
- 可靠性
mongodb从1.8版本后,采用binlog方式(MySQL同样采用该方式)支持持久化,增加可靠性;
Redis依赖快照进行持久化;AOF增强可靠性;增强可靠性的同时,影响访问性能。
可靠性上MongoDB优于Redis。