Redis学习笔记(1) Redis介绍及基础
1. Redis的特性
(1) 存储结构
Redis(Remote Dictionary Server,远程字典服务器)是以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。Redis支持的数据类型有字符串类型,散列类型,列表类型,集合类型,有序集合类型。
常见的MySQL等存储结构可能会使用额外的表来连接两个表,查询时需将该额外的表进行连接,并不直观。而Redis可以将程序中的数据直接映射到Redis中,数据在Redis中 的存储形式和其在程序中存储方式很相似。Redis的另一优势是对不同的数据类型提供了非常方便的操作方式,如使用集合类型存储文章标签,Redis可以对标签进行如交集、并集这样的集合运算。
(2) 内存存储与持久化
Redis数据库中的所有数据都存储在内存中,在普通的笔记本中,可以一秒内读写超过十万个键值。Redis也提供了持久化的支持,即将内存中的数据异步写入到硬盘中,同时不影响继续提供服务。
(3) 功能丰富
Redis适用于缓存、队列系统,其可以为每个键设置生存时间(Time To Live, TTL),生存时间到期后键会自动被删除。作为缓存系统,Redis可以限定数据占用的最大内存空间,在数据达到空间限制后可以按照一定规则自动淘汰不需要的键。
Redis的列表类型键可以用来实现队列,并且支持阻塞式读取。更高层面上,Redis还支持"发布/订阅"模式,可基于此构建聊天室系统。
(4) 简单稳定
关系数据库中获取posts表内id为1的记录的title字段的值,其命令为:
SELECT title FROM posts WHERE id = 1 LIMIT 1
Redis中读取键名为post:1的散列类型键的title字段的值,其命令为:
HGET post:1 title
Redis提供了很多种不同编程语言的客户端库,这些库很好的封装了Redis的命令,使得在程序中与Redis进行交互变得更容易。有些库还提供了可以将编程语言中的数据类型直接以相应的形式存储到Redis中。
2. 安装Redis
Redis约定版本号(小数点后的数字)为偶数的版本是稳定版,而为奇数的是非稳定版。
wget http://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable
make // 编译
make install //将可执行程序复制到/usr/local/bin目录中
(1) 启动和停止Redis
make install将如下可执行程序复制到/usr/local/bin目录下,包括:
1) redis-server:Redis服务器
2) redis-cli:redis命令行客户
3) redis-benchmark:redis性能测试工具
4) redis-check-aof:AOG文件修复工具
5) redis-check-dump:RDB文件检查工具
启动redis的方式有两种:
1) 直接启动:直接运行redis-server即可启动,Redis服务器会默认使用6379端口,通过--port参数可自定义端口号:
redis-server --port
2) 通过初始化脚本启动
适用于生产环境,Redis源码目录utils中初始化脚本redis_init_script,可通过如下步骤,配置Redis的运行方式和持久化文件、日志文件的存储位置等。
① 配置初始化脚本,先将初始化脚本复制到/etc/init.d目录中,文件名为redus_端口号,其中端口号表示让Redis监听的端口号,客户端通过该端口连接Redis,然后修改脚本第6行的REDISPORT变量的值为同样的端口号。
② 建立需要的文件夹,如存放Redis配置文件的/etc/redis和存放Redis持久化文件的/var/redis/端口号。
③ 修改配置文件,将配置模板redis.conf复制到/etc/redis目录中,以端口号命名,然后对以下参数进行编辑:
使Redis以守护进行模式运行daemonize=yes; 设置Redis的PID文件位置pidfile=/var/run/redis_端口号
设置Redis监听的'端口号port=端口号 设置持久化文件存放位置dir=/var/redis/端口号
配置好后即可使用/etc/init.d/redis_端口号 start启动redis。
3) 停止Redis
强行终止Redis进程可能导致数据丢失,正确的方法为:redis-cli SHUTDOWN,Redis会先断开客户端连接,然后根据配置执行持久化,最后完成退出。
也可以使用"kill Redis进程的PID"正常结束Redis。
3. Redis命令行客户端
redis-cli(Redis Command Line Interface)
(1) 发送命令
发送命令的两种方式:① 将命令作为redis-cli的参数执行,如 连接Redisredis-cli -h 127.0.0.1 -port 6379; PING命令测试客户端与Redis的连接是否正常,正常则返回PONG.
② 不附带参数运行redis-cli,将进入交互模式。
(2) 命令返回值
1) 状态回复,如SET设置某个键的值时,Redis会回复状态OK表示设置成功。
2) 错误回复,如命令出现不存在或命令格式有错误时会返回该类型,以ERR开头。
3) 整数回复,如递增键值的INCR命令会以整数形式返回递增后的键值,或获取当前数据库中键的数量DBSIZE命令,以(integer)开头。
4) 字符串回复,如请求一个字符串类型键的值GET。当请求的键值不存在时会得到一个空结果(nil)。
5) 多行字符串回复,如请求一个非字符串类型键的元素列表KEYS *,每行都以序号开头。
(3) 配置
启用配置文件的方法:在启动时将配置文件的路径作为启动参数传递给redis-server,如:redis-server /path/to/redis.conf
通过启动参数传递同名的配置选项会覆盖配置文件中相应的参数,如:redis-server /path/to/redis.conf --loglevel warning
在Redis运行时通过CONFIG SET命令在不重启Redis情况下动态修改部分Redis配置,如:CONFIG SET loglevel waring
4. 多数据库
Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。每个数据库对外都是以一个0开始的递增数字命名,Redis默认支持16个数据库,可通过配置参数databases修改。客户端与Redis建立连接后会自动选择0号数据库。
但Redis不支持自定义数据库的名字,因此开发者必须自己记录哪些数据库存储了哪些数据,此外Redis不支持为每个数据库设置不同的密码,所以一个客户端要么可以访问全部数据库,要么连一个数据库也没有权限访问。更为重要的,多个数据库之间并不是完全隔离的,如FLUSHALL将清空一个Redis实例中的所有数据库。
因此,不同的应用应该用不同的Redis实例存储数据,且不必担心多个Redis实例会额外占用很多内存。
Redis学习笔记(1) Redis介绍及基础的更多相关文章
- Redis学习笔记1-Redis的介绍和认识
说明:文章内容来自百度百科和redis官方对redis的介绍 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API ...
- redis学习笔记之redis简介
redis简介 Redis是一个开源的,高性能的,基于键值对的缓存与存储系统,通过设置各种键值数据类型来适应不同场景下的缓存与存储需求.同事redis的诸多高层级功能使其可以胜任消息队列,任务队列等不 ...
- Redis学习笔记之Redis单机,伪集群,Sentinel主从复制的安装和配置
0x00 Redis简介 Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure server). Redis的键值 ...
- Redis学习笔记(4) Redis事务、生存时间及排序
1. Redis事务 Redis中的事务(transaction)是一组命令的集合,一个事务中的命令要么都执行,要么都不执行.事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次 ...
- StackExchange.Redis学习笔记(一) Redis的使用初探
Redis Redis将其数据库完全保存在内存中,仅使用磁盘进行持久化. 与其它键值数据存储相比,Redis有一组相对丰富的数据类型. Redis可以将数据复制到任意数量的从机中 Redis的安装 官 ...
- Redis学习笔记(3) Redis基础类型及命令之二
1. 集合类型 集合类型与列表类型有很多相似之处,但二者的区别在于:前者具有唯一性,但不具有有序性:后者具有有序性,但不具有唯一性.集合类型的常用操作是向集合中加入或删除元素.判断某个元素是否存在等, ...
- Redis学习笔记(2) Redis基础类型及命令之一
1. 基础命令 (1) 获取符合规则的键名列表 格式为:KEYS pattern 其中pattern表示支持通配符 # 建立一个名为bar的键 > SET bar OK # 获取Redis所有键 ...
- redis学习笔记01 — 基本介绍、安装配置及常用命令
redis--NoSQL的一种 为了解决高并发.高可用.高扩展.大数据存储等一系列问题而产生的数据库解决方案,就是NoSQL NoSQL,非关系型数据库,全名:Not Only Sql,它不能代替关系 ...
- Redis学习笔记之Redis中5种数据结构的使用场景介绍
原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 redis 中一共有5种数据结构 ...
随机推荐
- C++构造函数初始化顺序
[本文链接] http://www.cnblogs.com/hellogiser/p/constructor-order.html 1.构造函数.析构函数与拷贝构造函数介绍 构造函数 构造函数不能有返 ...
- iOS 关于AFNetworking ssl 待完成
先普及下基本知识,都是从网上搜到的,感谢原作者的辛勤付出! 原文链接 http://m.blog.csdn.net/blog/bytxl/8586830 x509是数字证书的规范,P7和P12是两种封 ...
- ACM/ICPC 之 数据结构-线段树+区间离散化(POJ2528)
这道题用线段树做更方便更新和查询,但是其数据范围很大,因此要将离散化和线段树结合起来,算是一道比较经典的线段树+离散化的例题. 线段树的离散化有很多方法,在这里,我先用一次结点离散化,间接将源左右端点 ...
- Java for LeetCode 228 Summary Ranges
Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...
- UVALive 6577 Binary Tree 二叉树的LRU串
今天继续攒人品...真开心啊O(∩_∩)O~~各种身体不舒服~~ https://icpcarchive.ecs.baylor.edu/external/65/6577.pdf 题意是这样的,现在有一 ...
- nyoj298_点的变换_错误
点的变换 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 平面上有不超过10000个点,坐标都是已知的,现在可能对所有的点做以下几种操作: 平移一定距离(M),相对X ...
- IP子网划分
CIDR值: 1.掩码255.0.0.0:/8(A类地址默认掩码) 2.掩码255.128.0.0:/9 3.掩码255.192.0.0:/10 4.掩码255.224.0.0:/11 5.掩码255 ...
- Linear regression with multiple variables(多特征的线型回归)算法实例_梯度下降解法(Gradient DesentMulti)以及正规方程解法(Normal Equation)
,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, , ...
- Mysql之取消主从复制
Mysql5.7 Mysql取消主从复制很简单.只需在其要终止同步的Server上[一般是Slave]执行下面语句即可: stop slave; reset slave; 如图: .
- Java返回距离当前时间段
/** * 计算该时间离当前时间的差距 * @param time 格式为:yyyy-MM-dd HH:mm:ss * @return */ public static String getShort ...