Redis-基础介绍
- Redis 基础介绍
- 一、Redis介绍
- 二、Redis和Memecache的不同
- 三、Redis的最佳应用场景:
- 四、Redis支持的键值类型
- 五、安装Redis
- 六、Redis启动方式
- 七、Redis配置文件介绍
- 八、Redis常用命令
一、Redis介绍
Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。
Redis属于非关系型数据库和Memcached类似,redis也是一个key-value型存储系统。但redis支持的存储value类型相对更多,包括string(字符串)、list(列表)、set(集合)和zset(有序集合)等。这些数据类型都支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。为了保证效率,redis的数据都是缓存在内存中。区别是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在基础上实现了master-slave(主从)同步。
Redis官方网网站是:http://www.redis.io/ ,如下:

redis是一个高性能的key-value数据库。redis的出现、很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python、Ruby、Erlang、PHP客户端,使用方便。
关于Redis以往版本中存在的问题官方已经做出解释
https://redis.io/topics/problems
redis特点:
- 1)支持内存缓存,这个功能相当于memcached
- 2)支持持久化存储,这个功能相当于memcachedb,ttserver
- 3)数据库类型更丰富。比其他key-value库功能更强
- 4)支持主从集群、分布式
- 5)支持队列等特殊功能
应用:缓存从存取memcached更改存取redis
二、Redis和Memecache的不同
1.存储方式:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小, Redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有RDB快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做dump)2.数据支持类型:
redis在数据支持上要比memecache多的多。3.使用底层模型不同
新版本的redis直接自己构建了VM 机制,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。4.运行环境不同:
redis目前官方只支持Linux 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上总结:对于两者的选择还是要看具体的应用场景,如果需要缓存的数据只是key-value这样简单的结构时,我在项目里还是采用memcache,它也足够的稳定可靠。如果涉及到存储,排序等一系列复杂的操作时,毫无疑问选择redis。
三、Redis的最佳应用场景:
redis最佳使用场景是全部数据in-memory redis更多场景最为memcached的替代品来使用 需要除key/value之外的更多数据类型支持时,使用redis更合适 当存储的数据不能被剔除时,使用redis更合适
四、Redis支持的键值类型
目前Redis支持的键值数据类型如下:
String 字符串类型 Hash散列类型 List列表类型 Set集合类型 Zset有序集合类型
五、安装Redis
[root@luoahong- home]# wget –q http://download.redis.io/releases/redis-3.2.8.tar.gz
[root@luoahong- home]# tar xf redis-3.2..tar.gz
[root@luoahong- home]# cd redis-3.2.
[root@luoahong- redis-3.2.]# make
[root@luoahong- redis-3.2.]# make PREFIX=/usr/local/redis install
成功的标志:
[root@luoahong- ~]# tree /usr/local/redis/bin/
/usr/local/redis/bin/
├── redis-benchmark #redis性能读写测试工具
├── redis-check-aof #对更新日志appenonly.aof检查,类似于mysql binlog
├── redis-check-rdb #用于本地数据库rdb文件的检查
├── redis-cli #redis命令行客户端操作工具
├── redis-sentinel -> redis-server
└── redis-server #redis服务器daemon启动程序
3. 配置 redis 为系统服务
# mkdir -pv /usr/local/redis/{conf,db,log}
mkdir: created directory ‘/usr/local/redis/conf’
mkdir: created directory ‘/usr/local/redis/db’
mkdir: created directory ‘/usr/local/redis/log’
# cp -a utils/redis_init_script /etc/init.d/redis
# cp -a redis.conf /usr/local/redis/conf/6379.conf
编辑redis启动脚本
# vim /etc/init.d/redis
#!/bin/sh
#chkconfig: 2345 80 90 # 添加该行是为了设置成服务
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem. # chkconfig --add redis
# systemctl status redis
redis.service
Loaded: loaded (/etc/rc.d/init.d/redis)
Active: inactive (dead) EXEC=/usr/local/bin/redis-server # 修改为:EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli # 修改为:CLIEXEC=/usr/local/redis/bin/redis-cli
CONF="/etc/redis/${REDISPORT}.conf" # 修改为:CONF="/usr/local/redis/conf/${REDISPORT}.conf"
修改 redis 主配置文件
# vim /usr/local/redis/conf/6379.conf
daemonize no # 修改为 daemonize yes 设置redis服务后台启动
logfile "" # 修改为 logfile "/usr/local/redis/log/redis.log" 设置redis日志文件
dir ./ # 修改为 dir /usr/local/redis/db/ 设置 rdb 文件存储目录
配置环境变量
[root@luoahong- ~]# echo "export PATH=/usr/local/redis/bin:$PATH" >>/etc/profile
[root@luoahong- ~]# . /etc/profile or source /etc/profile
# systemctl daemon-reload
# systemctl start redis
# systemctl status redis
redis.service
Loaded: loaded (/etc/rc.d/init.d/redis)
Active: active (running) since Wed -- :: CST; 9s ago
CGroup: /system.slice/redis.service
└─ /usr/local/redis/bin/redis-server 127.0.0.1: Aug :: localhost.localdomain systemd[]: Starting redis.service...
Aug :: localhost.localdomain redis[]: Starting Redis server...
Aug :: localhost.localdomain systemd[]: Started redis.service.
Aug :: localhost.localdomain systemd[]: Started redis.service.
安装错误: 
说明:提示说关于分配器allocator, 如果有MALLOC 这个 环境变量, 会有用这个环境变量的 去建立Redis。
而且libc 并不是默认的 分配器, 默认的是 jemalloc, 因为 jemalloc 被证明 有更少的 fragmentation problems 比libc
但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数。
解决办法
make MALLOC=libc
六、Redis启动方式
- 1.直接启动
[root@luoahong-1 ~]# redis-server &
注:这个是根据环境变量的配置文件进行启动,redis需要启动在后台
- 2.通过端口启动
[root@luoahong- ~]# redis-server --port 6380 &
#这个需要我们的环境变量下面的conf文件放一个6380的配置文件。只需要修改一下端口就可以启动
- 3.指定配置文件启动
[root@luoahong- ~]# redis-server /usr/local/redis/conf/6389.conf &
通过启动参数传递同名的配置选项会覆盖文件中相应的参数
[root@luoahong- ~]# redis-server /usr/local/redis/conf/6389.conf --loglevel warning &
启动:
[root@luoahong-1 ~]# mkdir /usr/local/redis/conf #创建配置文件目录
[root@luoahong-1 ~]# cp -a redis-3.2.8/redis.conf /usr/local/redis/conf/ #拷贝配置文件
[root@luoahong-1 ~]# redis-server /usr/local/redis/conf/redis.conf & #启动
[1] 4501
[root@luoahong-1 ~]# 4501:M 28 Apr 06:47:05.568 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 3.2.8 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 4501
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
4501:M 28 Apr 06:47:05.570 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
4501:M 28 Apr 06:47:05.570 # Server started, Redis version 3.2.8
4501:M 28 Apr 06:47:05.570 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
4501:M 28 Apr 06:47:05.570 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
4501:M 28 Apr 06:47:05.571 * The server is now ready to accept connections on port 6379
关闭redis
|
1
2
3
4
5
6
7
|
我们可以使用自带脚本,或者使用ps –ef|grep redis 进行kill[root@luoahong-1 ~]# redis-cli shutdown4867:M 05 Jul 14:33:00.284 # User requested shutdown...4867:M 05 Jul 14:33:00.284 * Saving the final RDB snapshot before exiting.4867:M 05 Jul 14:33:00.285 * DB saved on disk4867:M 05 Jul 14:33:00.286 # Redis is now ready to exit, bye bye...[1]+ Done redis-server |
解决启动报warning信息:
可选值:0、1、2
0 内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。 1 内核允许分配所有的物理内存,而不管当前的内存状态如何。 2 内核允许分配超过所有物理内存和交换空间总和的内存
三种设置方法:
|
1
2
3
|
编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 生效sysctl vm.overcommit_memory=1echo 1 > /proc/sys/vm/overcommit_memory |
七、Redis配置文件介绍
############### 1、通用 ###############
<br>daemonize yes #是否以后台进程运行
pidfile /var/run/redis/redis-server.pid #pid文件位置
port #监听端口
bind 127.0.0.1 #绑定地址,如外网需要连接,设置0.0.0.0 空格分隔
timeout #连接超时时间,单位秒
loglevel notice #日志级别,分别有:
# debug :适用于开发和测试
# verbose :更详细信息
# notice :适用于生产环境
# warning :只记录警告或错误信息
logfile /var/log/redis/redis-server.log #日志文件位置
syslog-enabled no #是否将日志输出到系统日志
databases #设置数据库数量,默认数据库为0<br>
############### 2、快照方式 ###############<br>
save #在900s(15m)之后,至少有1个key发生变化,则快照
save #在300s(5m)之后,至少有10个key发生变化,则快照
save #在60s(1m)之后,至少有1000个key发生变化,则快照
rdbcompression yes #dump时是否压缩数据
dir /var/lib/redis #数据库(dump.rdb)文件存放目录<br>
############### 3、主从复制 ###############<br>
slaveof <masterip> <masterport> #主从复制使用,用于本机redis作为slave去连接主redis
masterauth <master-password> #当master设置密码认证,slave用此选项指定master认证密码
slave-serve-stale-data yes #当slave与master之间的连接断开或slave正在与master进行数据同步时,如果有slave请求,当设置为yes时,slave仍然响应请求,此时可能有问题,如果设置no时,slave会返回"SYNC with master in progress"错误信息。但INFO和SLAVEOF命令除外。
<br>############### 4、安全 ###############<br>
requirepass foobared #配置redis连接认证密码<br>
############### 5、 限制 ###############<br>
maxclients #设置最大连接数,0为不限制
maxmemory <bytes>#内存清理策略,如果达到此值,将采取以下动作:
# volatile-lru :默认策略,只对设置过期时间的key进行LRU算法删除
# allkeys-lru :删除不经常使用的key
# volatile-random :随机删除即将过期的key
# allkeys-random :随机删除一个key
# volatile-ttl :删除即将过期的key
# noeviction :不过期,写操作返回报错
maxmemory-policy volatile-lru#如果达到maxmemory值,采用此策略
maxmemory-samples #默认随机选择3个key,从中淘汰最不经常用的<br>
############### 6、附加模式 ###############<br>
appendonly no #AOF持久化,是否记录更新操作日志,默认redis是异步(快照)把数据写入本地磁盘
appendfilename appendonly.aof #指定更新日志文件名
# AOF持久化三种同步策略:
# appendfsync always #每次有数据发生变化时都会写入appendonly.aof
# appendfsync everysec #默认方式,每秒同步一次到appendonly.aof
# appendfsync no #不同步,数据不会持久化
no-appendfsync-on-rewrite no #当AOF日志文件即将增长到指定百分比时,redis通过调用BGREWRITEAOF是否自动重写AOF日志文件。<br>
############### 7、虚拟内存 ###############<br>
vm-enabled no #是否启用虚拟内存机制,虚拟内存机将数据分页存放,把很少访问的页放到swap上,内存占用多,最好关闭虚拟内存
vm-swap-file /var/lib/redis/redis.swap #虚拟内存文件位置
vm-max-memory #redis使用的最大内存上限,保护redis不会因过多使用物理内存影响性能
vm-page-size #每个页面的大小为32字节
vm-pages #设置swap文件中页面数量
vm-max-threads #访问swap文件的线程数<br>
############### 8、高级配置 ###############
hash-max-zipmap-entries #哈希表中元素(条目)总个数不超过设定数量时,采用线性紧凑格式存储来节省空间
hash-max-zipmap-value #哈希表中每个value的长度不超过多少字节时,采用线性紧凑格式存储来节省空间
list-max-ziplist-entries #list数据类型多少节点以下会采用去指针的紧凑存储格式
list-max-ziplist-value #list数据类型节点值大小小于多少字节会采用紧凑存储格式
set-max-intset-entries #set数据类型内部数据如果全部是数值型,且包含多少节点以下会采用紧凑格式存储
activerehashing yes #是否激活重置哈希
lua脚本
|
1
2
3
|
lua脚本的最大运行时间是需要被严格限制的,要注意单位是毫秒:lua-time-limit 5000如果此值设置为0或负数,则既不会有报错也不会有时间限制。 |
慢日志
|
1
2
3
4
5
6
7
8
|
redis慢日志是指一个系统进行日志查询超过了指定的时长。这个时长不包括IO操作,比如与客户端的交互、发送响应内容等,而仅包括实际执行查询命令的时间。针对慢日志,你可以设置两个参数,一个是执行时长,单位是微秒,另一个是慢日志的长度。当一个新的命令被写入日志时,最老的一条会从命令日志队列中被移除。单位是微秒,即1000000表示一秒。负数则会禁用慢日志功能,而0则表示强制记录每一个命令。slowlog-log-slower-than 10000慢日志最大长度,可以随便填写数值,没有上限,但要注意它会消耗内存。你可以使用SLOWLOG RESET来重设这个值。slowlog-max-len 128 |
默认情况,Redis不是在后台运行,我们需要把redis放在后台运行
|
1
2
|
vim /usr/local/redis/etc/redis.conf将daemonize的值改为yes |
八、Redis常用命令
远程连接redis
|
1
2
3
4
5
6
7
8
9
|
redis-cli –h 127.0.0.1 –p 6379-h ip地址-p 端口连接不同端口[root@luoahong-1 ~]# redis-cli -p 6380测试客户端与redis连接是否正常127.0.0.1:6379> pingPONG#redis设置密码修改配置文件,equirepass foobared去掉注释,foobared改为自己的密码。然后重启。 |
在redis中,使用CONFIG命令获取.
获取配置文件内容:
|
1
2
3
4
|
127.0.0.1:6379> CONFIG GET port1) "port"2) "6379"127.0.0.1:6379> CONFIG GET * #查看redis所有的配置内容 |
验证密码是否正确
|
1
2
3
|
AUTH password127.0.0.1:6379> AUTH 123456OK |
打印字符串
|
1
2
3
|
ECHO message127.0.0.1:6379> ECHO 1"1" |
关闭当前连接
|
1
|
QUIT |
切换到指定的数据库
|
1
|
SELECT index |
命令返回值
1.状态回复
|
1
2
3
|
redis 发送set命令设置某个键的值时,Redis会回复状态OK表示设置成功,另外ping命令的回复PONG也是状态回复。状态回复直接显示状态信息127.0.0.1:6379> PINGPONG |
2.错误回复
当出现命令不存在或命令格式有错误等情况时Redis会返回错误回复(error reply)错误回复以(error)开头,并在后面跟上错误信息。
|
1
2
|
127.0.0.1:6379> luoahong(error) ERR unknown command 'luoahong' |
3.整数回复
Redis虽然没有整数类型,但是却提供了一些用于整数操作的命令,如递增键值的INCR命令会以整数形式返回递增后的键值。整数回复(integer reply)以(integer)开头,并在后面跟上整数数据
|
1
2
|
127.0.0.1:6379> INCR foo(integer) 1 |
4.字符串回复
字符串回复(bulk reply)是最常见的一种回复类型,当请求一个字符串类型键值或一个其他类型键中的某个元素时就会得到一个字符串回复。字符串回复以双引号包裹:
|
1
2
|
127.0.0.1:6379> GET foo"1" |
特殊情况是当请求的键值不存在时会得到一个空结果,显示为(nil) 127.0.0.1:6379> GET luoahong (nil) 127.0.0.1:6379> GET www.luoahong.com (nil)
5.多行字符串回复
多行字符串回复(multi-bulk reply)同样很常见,如当请求一个非字符串类型键的元素列表时就会收到多行字符串回复。多行字符串回复中的每行字符串都以一个序号开头
|
1
2
|
127.0.0.1:6379> KEYS *1) "foo |
提示:KEYS命令的作用是获取数据库中符合指定规则的键名
原文链接
Redis-基础介绍的更多相关文章
- Redis基础介绍及安装示例
1.基本概念 Redis是由Salvatore Sanfilippo(意大利)开发的一个开源的高性能键值存储数据库,于2009年发布第一个版本并与同一年开源,官方站点:http://www.redis ...
- redis——基础介绍
转自:http://www.cnblogs.com/xing901022/p/4863929.html 1 什么是Redis Redis(REmote DIctionary Server,远程数据字典 ...
- Redis基础知识补充及持久化、备份介绍(二)--技术流ken
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)--技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis ...
- Redis基础知识补充及持久化、备份介绍
Redis知识补充 在上一篇博客<Redis基础认识及常用命令使用(一)–技术流ken>中已经介绍了redis的一些基础知识,以及常用命令的使用,本篇博客将补充一些基础知识以及redis持 ...
- Redis安装介绍
Redis安装介绍 一.Linux版本及配置 1. Linux版本:Red Hat Enterprise Linux 6虚拟机 2. 配置: 内存:1G:CPU:1核:硬盘:20G 二.Redis ...
- [.net 面向对象程序设计深入](14)Redis——基础
[.net 面向对象程序设计深入](14)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- Redis全面介绍
最近重新认识了一下Redis,借着这个机会,也整理一篇算是比较详尽和全面的文章吧. 缓存 缓存就是数据交换的缓冲区(称作Cache)——摘自百度百科.无论是在计算机硬件体系结构还是软件体系结构中, ...
- [.net 面向对象程序设计深入](36)Redis——基础
[.net 面向对象程序设计深入](36)Redis——基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- 4 Redis 配置文件介绍
2016-12-22 14:28:39 该系列文章链接NoSQL 数据库简介Redis的安装及及一些杂项基础知识Redis 的常用五大数据类型(key,string,hash,list,set,zse ...
- Redis基础用法、高级特性与性能调优以及缓存穿透等分析
一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...
随机推荐
- C++中STL中简单的Vector的实现
该vector只能容纳标准库中string类, 直接上代码了,StrVec.h文件内容为: #ifndef STRVEC_H #define STRVEC_H #include<iostream ...
- jQuery Ajax async=>false异步改为同步时,导致浏览器假死的处理方法
今天做一个需求遇到了这么个情况,就是用户个人中心有个功能,点击按钮,可以刷新用户当前的积分,这个肯定需要使用到ajax的同步请求了,当时喀喀喀三下五除二写玩了,大概代码如下: /** * 异步当前用户 ...
- python学习-31 内置函数
内置函数 1.abs() 绝对值 2.all() 判断列表里的所有值的布尔值(如果迭代列表里的每个值后都是True 则返回True) '])) 运行结果: True Process finis ...
- golang微服务框架go-micro 入门笔记1.搭建 go-micro环境
微服务的本质是让专业的人做专业的事情,做出更好的东西. golang具备高并发,静态编译等特性,在性能.安全等方面具备非常大的优势.go-micro是基于golang的微服务编程框架,go-micro ...
- Gulp 给所有静态文件引用加版本号
在juqery和easyui 盛行的年代许多项目采用纯静态页面去构建前端框架从而实现前后端分离的目的.项目开发周期内往往会频繁修改更新某个文件,当你将文件更新到服务器后客户端由于缓存问题而出现显示异常 ...
- Go内存分配器可视化指南【译】【精】
当我第一次开始尝试理解 Go 语言的内存分配器时,整个过程让我抓狂.一切看起来都像一个神秘的黑盒子.因为几乎所有技术魔法(technical wizardry)都隐藏在抽象之下,所以你需要一层一层的剥 ...
- 使用HttpClient调用接口
一,编写返回对象 public class HttpResult { // 响应的状态码 private int code; // 响应的响应体 private String body;get/set ...
- python3 语法 数据类型
python3中 有6种标准数据类型 数字,字符串,列表,元祖,集合,字典
- 复杂dic的文件化存储和读取问题
今天遇到一个难题.整出一个复杂的dic,里面不仅维度多,还含有numpy.array.超级复杂.过程中希望能够存储一下,万一服务器停了呢?万一断电了呢? 结果存好存,取出来可就不是那样了.网上搜索了很 ...
- 工厂交接班易出问题?MES系统实现精准对接
工厂交接班制度非常的严格和复杂,而MES系统能让繁琐的交接班流程简单快捷无措.MES系统在发生事件时记录传递事件,还可以主动对事件进行分类和报告.人员可以查看和深入到以前或当前班次的个别事件. 随着工 ...