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种数据结构 ...
随机推荐
- ccf559c
题意:给出一个矩阵棋盘,大小不超过10^5.上面有n个非法点(n<=2000)不可以踩,从左上角开始走到右下角,每次只能向下或者向右移动.问有多少种走法.结果对10^9+7取模. 分析: 组合数 ...
- Linux下安装Nginx服务器
安装Nginx之前,首先要安装好编译环境gcc和g++,然后以CentOS为例安装Nginx,安装Nginx需要PRCE库.zlib库和ssl的支持,除了ssl外其他的我们都是去官网下载: Nginx ...
- perl Can't use string Cxxx) as a symbol ref while "strict refs" in use at XXXX.pl错误
今天写脚本遇到Can't use string ("bond2 Link encap:InfiniBand ") as a symbol ref while "s ...
- UTF8编码转换(C#)
例如: UTF8---ISO-8859-1 string string = "这是中文";Encoding utf8 = Encoding.UTF8; Encoding ISO = ...
- spfa(模板)
spfa作为图论中的常用算法,深受各类出题人和各位OIer的喜爱: so,为了给大众创造福利,宝宝在此奉上spfa大发的思路和模板:以感谢社会, 感谢CCF,感谢CCTV, 感谢我的老师,感谢同学们, ...
- c++从文件中读取特定字符串问题的总结
1.每次从文件中读出一行作为一个字符串 可以用ifstream()函数来打开一个文件,然后用while加getline()函数即可每次读一行文件,直到文件结束 #include<unistd.h ...
- filter 简介
概述 filter() 方法使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组. 语法 var new_arrary = arr.filter(callback[, thisArg] ...
- 【leetcode】 Generate Parentheses (middle)☆
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
- 控制器与xib关联(用xib布局控制器)
IOS Xib使用——为控制器添加Xib文件 Xib文件是一个轻量级的用来描述局部界面的文件,它与StoryBoard类似,都是使用Interface Bulider工具进行编辑.但是StoryBoa ...
- XMPP框架下微信项目总结(2)授权登陆/注销/注册/打印日志
xmpp授权登陆步骤1 初始化xmppstream 连接服务器 传递属性jid(IP地址 端口号)2 连接成功后 传递“登”陆密码授权 3 授权后,发送在线消息xmpp所有的代理都是子线程中调用的,处 ...