Redis
Hello,大家好。我是派大星~
今天开始,会用十多个篇幅来从入门到精通讲解redis6
关于NoSql
NoSQL最常见的解释是non-relational, Not Only SQL也被很多人接受。
NoSQL仅仅是一个概念,泛指 「非关系型」 的数据库,区别于关系数据库,它们不保证关系数据的ACID特性。
NoSql的出现不是为了代替传统关系型数据库,而是作为他们的补充
NoSQL有如下优点:
- 易扩展(数据之间无关系,这样就非常容易扩展)
- 高可用(可以方便地实现高可用的架构)
- 高并发、大数据下读写能力强(高性能)
- 灵活的数据模型(无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式)
NoSql分类
键值(Key-Value)存储数据库
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果数据库管理员(DBA)只对部分值进行查询或更新的时候,Key/value就显得效率低下了。举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB。
列存储数据库
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.
文档型数据库
文档型数据库类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许之间嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。
图形(Graph)数据库
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。如:Neo4J, InfoGrid, Infinite Graph。
不同分类特点对比
| 分类 | Examples举例 | 典型应用场景 | 数据模型 | 优点 | 缺点 |
|---|---|---|---|---|---|
| 键值(key-value) | Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB | 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。 | Key 指向 Value 的键值对,通常用hash table来实现 | 查找速度快 | 数据无结构化,通常只被当作字符串或者二进制数据 |
| 列存储数据库 | Cassandra, HBase, Riak | 分布式的文件系统 | 以列簇式存储,将同一列数据存在一起 | 查找速度快,可扩展性强,更容易进行分布式扩展 | 功能相对局限 |
| 文档型数据库 | CouchDB, MongoDb | Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容) | Key-Value对应的键值对,Value为结构化数据 | 数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构 | 查询性能不高,而且缺乏统一的查询语法。 |
| 图形(Graph)数据库 | Neo4J, InfoGrid, Infinite Graph | 社交网络,推荐系统等。专注于构建关系图谱 | 图结构 | 利用图结构相关算法。比如最短路径寻址,N度关系查找等 | 很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。 |
Redis简介
redis是一个C语言编写、支持网络、基于内存、可持久化的日志型、高性能的Key-Value数据库。
和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)
典型应用场景
- 缓存(热点数据缓存,例如报表、明星出轨、商品内容等)
- 分布式的session共享及分离
- 分布式锁
- 点赞、签到、打卡
- 排行榜
- 阅读量、点赞量等
- .......
Redis的下载、安装、文档
redis英文官网
redis中文官网
redis命令大全(redis.cn版本)
redis命令大全
因为redis6.0.7之前存在bug 所以使用6.0.8以后版本官方博客文档
linux命令下载(以6.0.8版本为例)
# 进入 opt目录
$ cd /opt
# 下载redis
$ wget https://download.redis.io/releases/redis-6.0.8.tar.gz
# 解压redis
$ tar -zxvf redis-6.0.8.tar.gz
# 安装scl源
$ yum -y install centos-release-scl
# 安装新版gcc环境(低版本gcc无法编译redis6)
$ yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
#临时切换为新版本
$ scl enable devtoolset-9 bash
#注意:scl命令启用只是临时的,推出xshell或者重启或exit就会恢复到原来的gcc版本。
#如果要长期生效的话,执行如下:
$ echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
# 编译
$ cd redis-6.0.8
$ make
# 安装到指定目录
$ make install PREFIX=/opt/redis
redis的启动
redis的启动文件在 安装目录下的bin目录下
将redis的配置文件copy到工作目录
cp 解压目录/redis.conf /opt/redis/bin
启动redis
到安装目录文件夹下
cd bin/
更改配置文件
vi redis.conf
将 daemonize 改为 yes 后台启动
注释掉 bind 127.0.0.1
protected-mode 改为 no 可以远程访问
./redis-server redis.conf
查看redis是否启动
使用redis
进入redis客户端./redis-cli
连接上之后 如果是云服务器的话强烈建议 设置密码
config set requirepass 123456
也可以修改 redis.conf 的 #requirepass foobared
设置密码后需要密码才可操作
登录后 auth 123456
可以在登录时 ./redis-cli -a 123456