Redis介绍及相关操作
**概念:**redis是一款高性能的nosql(not only sql,意为’不仅仅是sql‘)系列的非关系型数据库。以键值对的形式存储数据,存储在内存中,也可以持久化到硬盘。
nosq和关系型数据库比较:
-
优点:
- 成本:nosql数据库简单易部署,基本都是开源软件,不需要像oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
- 查询速度:nosql数据库将数据存储于缓存中,关系型数据库将数据存储在硬盘中,所以查询速度远不及nosql数据库。
- 存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基本数据类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
- 扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难
-
缺点:
- 维护的工具和资料相对有限,因为nosql属于新的技术,不能和关系型数据库技术成熟度相比。
- 不提供对sql的支持,增加了学习成本。
- 不提供关系型数据库对事务的支持。
-
总结:
关系型数据库与nosql数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在是个使用nosql的时候使用nosq数据库,让nosql数据库对关系型数据库的不足进行弥补。
一般会将数据存储在关系型数据库中,在nosql数据库中备份关系型数据库的数据。
使用场景:
- 缓存:缓存几乎是现在所有大中型网站都在用的必杀技,合理的利用缓存可以大大提高网站的访问速度,还能有降低服务器的压力。
- 排行榜:一般使用有序集合(sortedSet)进行。
- 计数器:比如某宝某件商品的浏览量,某音视频播放量。
- 社交网络:点赞、关注、共同好友是社交网站的基本功能,设计网站的访问量相对较大。Redis提供的哈希、集合等数据结构可以很好的实现这些功能。
- 最新列表:Redis列表结构,LPUSH可以在列表头部插入一个内容ID作为关键字,LTRIM可用来限制列表的数量,这样列表永远为N个ID,无需查询最新的列表,直接根据ID去到对应的内容页即可。
- 分布式集群架构中的session分离。
- 数据过期处理:比如短信验证码等。
- 楼主现在还未了解到的(●’◡’●)。
比如:分布式锁、消息系统。
数据结构:
redis存储的是:key,value格式的数据,其中key都是字符串,value有5中不同的数据结构
- 字符串类型String
- 哈希类型hash:可以理解成Java中的map格式
- 列表类型list:可以理解成Java中的linkedlist格式
- 集合类型set:可以理解成Java中的hashset的格式
- 有序集合类型sortedset:会进行自动排序的hashset的格式。
- 集合元素不允许存储重复元素
常用命令操作redis:
- 字符串类型String
- 存储:set key value
- 获取:get key
- 删除:del key
- 哈希类型hash:可以理解成Java中的map格式
- 存储:hset key fileld value
- 获取:hget key field
- 获取全部:hgetall key
- 删除:hdel key field
- 列表类型list:可以理解成Java中的linkedlist格式
- 存储:lpush key value/rpush key value
- 这个类型的数据可以看作是队列,lpush是从队列左边添加元素,rpush是从队列右边添加元素
- 获取:lrange key start end:范围获取,获取所有的话start:0,end:-1
- 删除:lpop key value/rpop key value
- 删除的元素会返回到控制台
- 存储:lpush key value/rpush key value
- 集合类型set:可以理解成Java中的hashset的格式
- 存储:sadd key value
- 获取:smembers key:获取集合中的所有元素
- 删除:srem key value:删除set集合中的某个元素
- 有序集合类型sortedset:会进行自动排序的hashset的格式。
- 存储:zadd key score value:存储数据及数据对应的分数、会根据分数进行排序
- 获取:zrange key start end
- 获取带有分数:zrange key start end withscore
- 删除:zrem key value
通用命令
keys * :查询所有的键
type key:查询该key对应的value的数据类型
del key:删除指定的key和value
Redis持久化:
-
redis是一个内存数据库,当redis重启或者电脑重启数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中、
-
redis持久化机制:
-
RDB:默认方式,不需要进行配置,默认就使用这种机制。(推荐)
-
在一定的间隔时间中,检测key的变化情况,然后持久化数据。
-
使用方法:在redis的目录中有redis.windows.conf文件中,找到
-
save 900 1 save 300 10 save 60 10000 #redis默认配置 #配置文件中第一个数字是秒数、第二个是更改的数量 #比如:第一个就是在900秒内,如果有一个key发生改变就持久化一次
设置完成之后,需要加载配置文件运行
命令行:切换到软件目录下
redis-server.exe redis.windows.conf
发生持久化,数据会存储在rdb结尾的文件里
-
-
AOF:日志记录的方式,可以记录每一次命令的操作。可以在每一次命令操作后,持久化数据。
-
使用方法:在redis的目录中找到redis.windows.conf文件,找到
-
appendonly no #no表示关闭AOF #改成yes就可以开启AOF持久化机制
其中还可以指定AOF的持久化机制
#appendfsnc always:每一次操作都进行持久化 appendfync everysec:每隔一秒进行一次持久化 #appendfync no:不进行持久化
设置完成之后,需要加载配置文件运行
命令行:切换到软件目录下
redis-server.exe redis.windows.conf
发生持久化,数据会存储在aof结尾的文件里
-
-
redis数据库不保证数据的绝对安全,不丢失
如果想要使用java语言来操作redis数据库,只需要添加redis的jar包,新建redis对象就可以进行操作,具体方法的名称与命令相同,操作完成之后别忘记关闭redis哟。
关注我,下期更新redis的连接池。