Redis概述与安装,数据类型简介

栏目: 数据库 · 发布时间: 6年前

内容简介:目录Redis英语全称:( REmote DIctionary Server ) 远程字典服务器。是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的

目录

Redis概述与安装使用

Author:SimpleWu

Redis简介

Redis英语全称:( REmote DIctionary Server ) 远程字典服务器。

是完全开源免费的,用 C语言 编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,是当前最热门的 NoSql数据库 之一,也被人们称为数据结构服务器

Redis通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

什么是NoSQL?

概念 : NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”-泛指非关系型的数据库

解析:泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心。

传统单机 MySQL 瓶颈

  1. 数据量的总大小,一个机器1放不下,单表数据达到500万时MySQL性能低
  2. 数据的索引(B + Tree) 一个机器的内存放不下时
  3. 访问量(读写混合)一个实例不能承受

为什么需要NoSQL

今天我们可以通过第三方平台(如:Baidu,Google,Facebook等)可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。 我们如果要对这些用户数据进行挖掘,那 SQL 数据库已经不适合这些应用了, NoSQL数据库的发展能很好的处理这些大数据。和传统的关系型数据库相比,NoSQL具有以下的优势:

  • high performance ,高并发读写,动态页面展示与交互,比如微博点赞评论等操作,实时统计在线人数排行榜等
  • huge storage,海量数据的高效存储和访问,大型网站的用户登录系统
  • high scalability && high availability,高可扩展性和高可用性

互联网的瓶颈

高并发读写:

针对短时间内具有高并发的情况,特别是短时间内大量的写入操作。传统数据库针对这种情况就有些力不从心了。

海量数据的高效率存储和访问:

现在的数据已经是非常庞大了,一些大型网站每天产生的数据量是相当恐怖的。存储了这么多的数据,查询效率就会受到很大的影响。

高科扩展性和高可用性:

基于传统数据库的结构,我们的数据库表是非常难以横向扩展的,比如增加一个新的字段时或者修改某个字段时,牵一发而动全身。

数据存储的方式单一:

在数据库中针对形形色色的数据,我们都只有采用表结构的方式来存储数据。

No-Sql能干什么?

易扩展:

NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。

大数据量性能高:

NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。

一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了

多样灵活的数据模型:

NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是一个噩梦

NoSQL数据库的四大分类

  • 键值(Key-Value)存储数据库
  • 文档型数据库(bson)
  • 列存储数据库
  • 图形(Graph)数据库

对比:

  • key-value: 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等。优点:查询速度快。缺点:数据无结构化,通常只被当做字符串或者二进制数据。
  • 列存储: 分布式文件系统。优点:查找速度快,可扩展性强,更容易进行分布式扩展。缺点:功能相对局限。
  • 文档型: 与key-value类似,不同的是数据库能够了解value的内容。优点:数据结构要求不严格,表结构可变,不需要预先定义表结构。缺点:查询效率不高,缺乏统一的语法。
  • 图形: 社交网络,推荐系统。专注于构建关系图谱。优点:利用图形结构相关算法,来寻求最短路径。缺点:很多时候需要对整个图形计算才能得出需要的信息。

Redis能干嘛?

  • 缓存
  • 网站访问统计
  • 任务队列
  • 数据过期处理
  • 应用排行榜
  • 分布式集群架构中的session分离

Redis的特点?

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis的安装

Redis 支持多种平台,大多数情况下考虑到内存会在 Linux 下搭建 Redis 服务器。

下载地址:

Linux版本
http://www.redis.cn/download.html
windowns版本
https://github.com/MicrosoftArchive/redis/releases

Linxu环境下安装redis

下载:

[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# wget http://download.redis.io/releases/redis-4.0.6.tar.gz

解压:

[root@localhost src]# tar -zxf redis-4.0.6.tar.gz 
[root@localhost src]# ll
total 1688
drwxrwxr-x. 6 root root    4096 Dec  4  2017 redis-4.0.6
-rw-r--r--. 1 root root 1723533 Dec  4  2017 redis-4.0.6.tar.gz

编译:

[root@localhost redis-4.0.6]# make
# 如果编译失败请先下载编译依赖,编译成功不需要执行以下命令
yum install wget make gcc tcl

安装:

# 将redis安装到/usr/local/redis目录
[root@localhost redis-4.0.6]# make PREFIX=/usr/local/redis install
# 进入redis安装目录
[root@localhost redis-4.0.6]# cd /usr/local/redis/bin/
[root@localhost bin]# ll
total 35432
-rwxr-xr-x. 1 root root 5597214 Aug 30 05:34 redis-benchmark
-rwxr-xr-x. 1 root root 8314825 Aug 30 05:34 redis-check-aof
-rwxr-xr-x. 1 root root 8314825 Aug 30 05:34 redis-check-rdb
-rwxr-xr-x. 1 root root 5736370 Aug 30 05:34 redis-cli
lrwxrwxrwx. 1 root root      12 Aug 30 05:34 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 8314825 Aug 30 05:34 redis-server
# 如果出现以上文件说明redis安装成功了

运行:

[root@localhost bin]# ./redis-server

使用内置的客户端命令redis-cli进行使用:

[root@localhost bin]# ./redis-cli
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"
127.0.0.1:6379>

修改redis配置文件

# 复制redis.conf文件到/etc目录
[root@localhost redis-4.0.6]# cp /usr/local/src/redis-4.0.6/redis.conf /etc/redis.conf
# 编辑redis.conf文件
[root@localhost ~]# vim /etc/redis.conf 
# 设置redis为后台启动进程,将daemonize no 改为 daemonize yes
daemonize yes 
# 修改绑定的主机地址,将#bind 127.0.0.1改成自己的ip地址,去掉"#"号
bind 192.168.41.22

关闭redis服务,重新运行

[root@localhost bin]# ./redis-cli shutdown
# 重新启动redis加载指定的配置文件
[root@localhost bin]# ./redis-server /etc/redis.conf

将redis-server和redis-cli命令加入环境变量

vim /etc/proflie
# 在最后一行加入
export PATH=/usr/local/redis/bin:$PATH

使其立即生效

source /etc/proflie

如果不想手动编辑redis.conf文件可以通过redis提供的服务 工具 生成 这部分可以不执行

[root@localhost ~]# cd /usr/local/src/redis-4.0.6/utils
[root@localhost utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

# 启动redis
[root@localhost utils]# service redis_6379 start
Starting Redis server...
# 查看redis是否启动
[root@localhost utils]# service redis_6379 status
Redis is running (23804)
# 关闭redis
[root@localhost utils]# service redis_6379 stop
Stopping ...
Redis stopped

windows下安装Redis

在我们windows下安装redis可以去微软github上下载,但是只提供了64位操作系统的。

这里我们下载 Redis-x64-xxx.zip压缩包到 任意目录,解压后,将文件夹重新命名为 redis。Redis分为服务器和客户端两种,必须启动服务器才能使用Redis。

启动redis服务

启动方式来到doc界面输入:

redis-server

启动后出现这种玩意:

[2900] 20 Nov 15:20:23.629 # Warning: no config file specified, using the defaul
t config. In order to specify a config file use redis-server /path/to/redis.conf

                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.2.100 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 2900
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

[2900] 20 Nov 15:20:23.637 # Server started, Redis version 3.2.100
[2900] 20 Nov 15:20:23.637 * The server is now ready to accept connections on po
rt 6379

其实解压后我们可以直接运行redis-server.exe也是可以启动的效果同上。

客户端连接服务器

doc界面输入:

Redis-cli –h host –p port –a password

获取直接打开redis-cli.exe效果一致。

Redis启动后的配置

进程相关:单进程模型来处理客户端的请求。对读写等事件的响应是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率。

密码相关:统一密码管理,16个库都是同样密码,要么全部连上,要么一个也连接不上。

Redis索引数据库索引从0开始

数据库相关

  • 默认16个数据库,下标从0开始,初始默认使用0号库,可以通过配置文件修改数据库默认值。
  • select:切换数据库 如:select 1,则切换到1的数据库
  • dbsize:可查看当前数据库key的数据
  • flushdb:清空当前数据库
  • flushall:清空所有数据库
  • keys:获取当前数据库的key,如:keys 获取所有,key k? 获取字母以k开始且两字符的,key k 以k开始的

Redis的五大类型

  • String(字符串)
  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • Zset(sorted set:有序集合)

Redis string类型

tring是redis最基本的类型,一个key对应一个value。String类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象。string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M。

指令 描述
SET key value 设置指定 key 的值。
GET key 获取指定 key 的值。
STRLEN KEY 返回 key 所储存的字符串值的长度。
GETRANGE key start end 返回 key 中字符串值的子字符
SETRANGE key offset value 这个命令的作用是覆盖key对应的string的一部分,从指定的offset处开始,覆盖value的长度。
GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。
INCR key 将 key 中储存的数字值增一。
INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 。
DECR key 将 key 中储存的数字值减一。
DECRBY key decrement key 所储存的值减去给定的减量值(decrement) 。
MGET key1 [key2..] 获取所有(一个或多个)给定 key 的值。
MSET key value [key value ...] 同时设置一个或多个 key-value 对。
APPEND key value 如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。

详细指令参考

Redis 哈希(Hash)

Redis Hash:是一个string类型的field和value(以键值)的映射表,hash特别适合用于存储对象。

存储大小:每个 hash 可以存储 232 - 1 键值对(40多亿)。

案例:设置了 redis 的一些描述信息(name, description, likes, visitors) 到哈希表的 runoobkey 中

指令 描述
HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。
HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。
HGET key field 获取存储在哈希表中指定字段的值。
HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。
HMGET key field1 [field2] 获取所有给定字段的值
HGETALL key 获取在哈希表中指定 key 的所有字段和值
HDEL key field1 [field2] 删除一个或多个哈希表字段
HEXISTS key field 查看哈希表 key 中,指定的字段是否存在
HKEYS key 获取所有哈希表中的字段
HLEN key 获取哈希表中字段的数量
HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值
HVALS key 获取哈希表中所有值

详细参考地址

Redis 列表(List)

Redis列表list:

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

存储数据量:

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)

指令 描述
LPUSH key value1 [value2] 将一个或多个值插入到列表头部
RPUSH key value1 [value2] 将一个或多个值插入到列表尾部
LRANGE key start stop 获取列表指定范围内的元素
LPOP key 移出并获取列表的第一个元素
RPOP key 移除并获取最后一个元素
LINDEX key index 通过索引获取列表中的元素
LLEN key 获取列表长度
LTRIM key start stop 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除
LREM key 移除列表元素
LSET key index value 通过索引设置列表元素的值
LINSERT key BEFORE|AFTER pivot value 在列表的元素前或者后插入元素

详细参考地址

Redis 集合(Set)

Redis 集合-set

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

存储数据量:

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

指令 描述
SADD key member1 [member2] 向集合添加一个或多个成员
SCARD key 获取集合的成员数
SMEMBERS key 返回集合中的所有成员
SISMEMBER key member 判断 member 元素是否是集合 key 的成员
SREM key member1 [member2] 移除集合中一个或多个成员
SRANDMEMBER key [count] 返回集合中一个或多个随机数
SPOP key 移除并返回集合中的一个随机元素
SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合

详细参考地址

Redis 有序集合(sorted set)

Redis 有序集合(sorted set):

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

存储数量:集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

指令 描述
ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZRANGE key start stop [WITHSCORES] 通过索引区间返回有序集合成指定区间内的成员
ZRANGEBYSCORE key min max [WITHSCORES][LIMIT] 通过分数返回有序集合指定区间内的成员
ZREM key member [member ...] 移除有序集合中的一个或多个成员
ZREMRANGEBYLEX key min max 移除有序集合中给定的字典区间的所有成员
ZCARD key 获取有序集合的成员数
ZCOUNT key min max 计算在有序集合中指定区间分数的成员数
ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
ZSCORE key member 返回有序集中,成员的分数值
ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,通过索引,分数从高到底
ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序
ZSCAN key cursor [MATCH pattern][COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)

各个数据类型的应用场景

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

以上所述就是小编给大家介绍的《Redis概述与安装,数据类型简介》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

How to Think About Algorithms

How to Think About Algorithms

Jeff Edmonds / Cambridge University Press / 2008-05-19 / USD 38.99

HOW TO THINK ABOUT ALGORITHMS There are many algorithm texts that provide lots of well-polished code and proofs of correctness. Instead, this one presents insights, notations, and analogies t......一起来看看 《How to Think About Algorithms》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

URL 编码/解码
URL 编码/解码

URL 编码/解码

SHA 加密
SHA 加密

SHA 加密工具