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种数据结构 ...
随机推荐
- ACM/ICPC 之 BFS-广搜进阶-八数码(经典)(POJ1077+HDU1043)
八数码问题也称为九宫问题.(本想查查历史,结果发现居然没有词条= =,所谓的历史也就不了了之了) 在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同.棋盘上还有一个 ...
- 25. javacript高级程序设计-新兴的API
1. 新兴的API requestAnimationFrame():是一个着眼于优化js动画的api,能够在动画运行期间发出信号.通过这种机制,浏览器就能够自动优化屏幕重绘操作 Page Visibi ...
- percona-toolkit 之 【pt-slave-delay】说明
摘要: 在主从复制的架构中,正常情况下主上操作的记录也会在从上进行操作,虽说是异步复制,但操作会“实时”的同步到从.比如在主上不小心误操作了,还没等反应过来从上也会马上执行误操作,后期只有通过二进制或 ...
- codeforces 557B. Pasha and Tea 解题报告
题目链接:http://codeforces.com/problemset/problem/557/B 题目意思:有 2n 个茶杯,规定第 i 个茶杯最多只能装 ai 毫升的水.现在给出 w 毫升的水 ...
- oracle触发器,一个表新增、修改的同时同步另一张表
oracle创建触发器,把本地新增.修改数据过程同步到另一个服务器上去. 如果是本地,加数据库名即可.如果是远程服务器,不是一台机器,做一个db_link操作即可. ----------------- ...
- Android Volley入门到精通:定制自己的Request
经过前面两篇文章的学习,我们已经掌握了Volley各种Request的使用方法,包括StringRequest.JsonRequest.ImageRequest等.其中StringRequest用于请 ...
- 【leetcode】Kth Largest Element in an Array (middle)☆
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...
- codeforces gym 100286 I iSharp (字符串模拟)
题目链接 给定一个字符串.输入是int& a*[]&, b, c*; 输出是 int&&[]* a;int& b;int&* c; 输入格式里逗号后面一 ...
- 在Debian8.3中解决Odoo出现的问题:Unable to find Wkhtmltopdf on this system. The report will be shown in html.
解决Odoo出现的问题:Unable to find Wkhtmltopdf on this system. The report will be shown in html. 下载wkhtmltop ...
- JAVA addShutdownHook测试
public static void main(String[] args) { System.out.println("1111111111"); try { Thread.sl ...