Redis学习系列 -- 基础知识学习

1、Redis是使用C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,是Nosql的一种。Key为字符串,value可以是 字符串(String)、哈希(Map)、列表(list)、集合(sets) 和 有序集合(sorted sets)等类型,各种数据类型都有其对应的应用场景,如哈希表用户对象存储、列表用户消息队列等

2、Redis是C/S结构的,分为服务端和客户端。客户端可以是redis-cli.exe,也可以是各类语言的API。其中,redis-cli通过如下形式进行连接

$ redis-cli -h host -p port -a password

是否需要进行密码的校验可以通过配置文件进行配置,这也是为了安全考虑。

3、Redis服务可以直接运行redis-server.exe来启动,同时也可以在启动时附带上配置文件路径,如果不带就采用默认的配置文件(redis.conf)。服务的关闭是通过QUIT命令来完成的。

4、可以在客户端执行PING命令查看Redis服务是否启动,返回PONG表示服务已启动。

5、可以在服务端执行INFO命令来查看Redis服务的运行时信息。

6、Redis支持数据的持久化(aof/rdb),可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用

7、一个Redis实例可以有多个数据库,具体个数可以在配置文件中通过databse指令指定,相应的通过SELECT 命令来在不同的数据库之间切换。 

8、Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。

9、单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

10、Redis 支持使用 Lua 解释器来执行脚本。 Reids 2.6 版本通过内嵌支持 Lua 环境。执行脚本的常用命令为 EVAL

11、可以使用分区提升redis的计算能力以及数据存储量;使用分区会增加备份/持久化以及动态缩容/扩容的难度,同时对于多个key的操作很多是不支持的(这些key可能位于不同的分区)。

12Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。

13、SAVE 命令用于创建当前数据库的备份,或者使用BGSAVE命令在后台备份数据库。


个人觉得Redis较Memcache、MongoDB数据库有以下几个优点:

(1)丰富的数据类型,可以cover目前觉大多数的业务需要,这一点是最重要的。

(2)支持原子性,这是关系型数据库ACID特性里的一点

OK,下面附带上Redis各种数据类型常见的应用场景:

类型 简介 特性 场景
String(字符串) 二进制安全 可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M ---
Hash(字典) 键值对集合,即编程语言中的Map类型 适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去) 存储、读取、修改用户属性
List(列表) 链表(双向链表) 增删快,提供了操作某一段元素的API 1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列
Set(集合) 哈希表实现,元素不重复 1,添加、删除,查找的复杂度都是O(1) 2,为集合提供了求交集、并集、差集等操作 1,共同好友 2,利用唯一性,统计访问网站的所有独立ip 3,好用推荐时,根据tag求交集,大于某个阈值就可以推荐
Sorted Set(有序集合) 将Set中的元素增加一个权重参数score,元素按score有序排列 数据插入集合时,已经进行天然排序 1,排行榜 2,带权重的消息队列
本片文章只是对于Redis有个大概了解,后续会再详细展开。



猜你喜欢

转载自blog.csdn.net/ydm19891101/article/details/80789464