Redis系列之(一):10分钟玩转Redis(转)
1. Redis介绍
Redis是一个开源的使用ANSI C语言编写、基于内存的Key-Value数据库。
它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。
Redis支持主从同步,数据可以从主服务器向任意数量的从服务器上同步,由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。
相比memcached,Rdeis有以下优点:
1. redis原生支持的数据类型更多。
2. redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上。
3. redis支持master-slave模式的数据备份。
4. 性能。Redis作者的说法是平均到单个核上的性能,在单条数据不大的情况下Redis更好。
为什么这么说呢,理由就是Redis是单线程运行的。因为是单线程运行,所以和Memcached的多线程相比,整体性能肯定会偏低。因为是单线程运行,所以IO是串行化的,网络IO和内存IO,因此当单条数据太大时,由于需要等待一个命令的所有IO完成才能进行后续的命令,所以性能会受影响。
2. 安装Redis
2.1 Redis的安装十分简单,用yum或apt-get可以直接安装
|
1
2
|
# yum install epel-release (centos 7可以直接安装epel源)# yum install redis |
2.2 启动/停止Redis
|
1
2
3
4
|
# redis-server /etc/redis.conf# systemctl start redis# systemctl stop redis |
3. 使用Redis
3.1 Redis-cli命令行操作KV
连接到Redis
|
1
2
|
# redis-cli -p port# redis-cli |
ping
|
1
|
127.0.0.1:6379> ping<br>PONG |
设置键值
|
1
2
|
127.0.0.1:6379> set testkey "hello"OK |
查询键
|
1
2
|
127.0.0.1:6379> get testkey"hello" |
删除键
|
1
2
|
127.0.0.1:6379> del testkey(integer) 1 |
设定有效期限
|
1
2
|
127.0.0.1:6379> setex test 10 111OK |
用EXPIRE key s 设定过期时间 毫秒用PEXPIRE
|
1
2
|
127.0.0.1:6379> EXPIRE test11 300(integer) 1 |
用TTL key 查看过期时间 毫秒用PTTL
|
1
2
|
127.0.0.1:6379> TTL test11(integer) 288 |
用PERSIST key 取消过期时间
|
1
2
|
127.0.0.1:6379> PERSIST test11(integer) 1 |
3.2 高级功能
3.2.1 自增,自减等,INCR、DECR、INCRBY、SORT
|
1
2
3
4
5
6
7
8
|
127.0.0.1:6379> set counter 100OK127.0.0.1:6379> incr counter(integer) 101127.0.0.1:6379> incr counter(integer) 102127.0.0.1:6379> decr counter(integer) 101 |
3.2.2 事务
|
1
2
3
4
5
6
7
8
9
10
11
12
|
127.0.0.1:6379> MULTIOK127.0.0.1:6379> set test11 111111QUEUED127.0.0.1:6379> set test12 121212QUEUED127.0.0.1:6379> incr counterQUEUED127.0.0.1:6379> EXEC1) OK2) OK3) (integer) 102 |
3.2.3 HyperLogLogs
Redis 在 2.8.9 版本添加了 HyperLogLog 算法。
3.2.4 发布/订阅 功能
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。
在一个客户端订阅频道 redisChat
|
1
2
3
4
5
|
127.0.0.1:6379> SUBSCRIBE redisChatReading messages... (press Ctrl-C to quit)1) "subscribe"2) "redisChat"3) (integer) 1 |
在另一个客户端,发送消息到频道 redisChat,订阅者就能接收到消息
发布端:
|
1
2
|
127.0.0.1:6379> PUBLISH redisChat "redis haha"(integer) 1 |
订阅端:
|
1
2
3
4
5
6
7
8
|
127.0.0.1:6379> SUBSCRIBE redisChatReading messages... (press Ctrl-C to quit)1) "subscribe"2) "redisChat"3) (integer) 11) "message"2) "redisChat"3) "redis haha" |
3.3查看Redis状态
|
1
|
127.0.0.1:6379> info |

info输出的信息很多,可以指定输出的部分
|
1
|
127.0.0.1:6379> info stats |

|
1
|
127.0.0.1:6379> info memory |

used_memory : 由 Redis 分配器分配的内存总量,以字节(byte)为单位。
used_memory_rss : 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps等命令的输出一致。
rss > used ,且两者的值相差较大时,表示存在(内部或外部的)内存碎片。
内存碎片的比率可以通过 mem_fragmentation_ratio 的值看出。
used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了,在这种情况下,操作可能会产生明显的延迟。
used_memory_peak : 峰值,设定的最大内存要大于峰值
3.4 其他命令
查看记录数
|
1
|
127.0.0.1:6379> dbsize |

查看所有KEY
|
1
|
127.0.0.1:6379> KEYS * |

列出所有客户端连接
|
1
|
127.0.0.1:6379> CLIENT LIST |

关闭ip:port的客户端
|
1
|
127.0.0.1:6379> CLIENT KILL 127.0.0.1:11902 |
清空所有数据库的所有key
|
1
|
127.0.0.1:6379> FLUSHALL |
清空当前数据库中所有key
|
1
|
127.0.0.1:6379> FLUSHDB |
返回最后一次成功保存数据到磁盘的时间,以UNIX时间戳格式表示
|
1
|
127.0.0.1:6379> LASTSAVE |
返回当前服务器时间,以UNIX时间戳格式表示
|
1
|
127.0.0.1:6379> TIME |
连接到其他数据库(默认数据库是0)
|
1
2
|
127.0.0.1:6379> SELECT 1OK |
将当前数据库的 key 移动到指定的数据库
|
1
2
|
127.0.0.1:6379> MOVE test2 1(integer) 1 |
4. 设定文件
4.1 /etc/redis.conf
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
daemonize no 是否以后台daemon方式运行timeout 0 请求超时时间maxclients 10000 最大连接数maxmemory <bytes> 最大内存maxmemory-policy volatile-lru 达到最大内存时的LRU驱逐策略maxmemory-samples 3 随机抽取n个key执行LRUhash-max-ziplist-entries 512 Map内部不超过多少个成员时会采用线性紧凑格式存储hash-max-ziplist-value 64 Map内成员值长度不超过多少字节会采用线性紧凑格式存储类似的还有,list-max-ziplist-entries 512,list-max-ziplist-value 64等等slowlog-log-slower-than 10000 slow log计入时间,microseconds(1000000)slowlog-max-len 128 slow log计入条数 |
4.2 查看最大连接数
|
1
2
3
|
127.0.0.1:6379> config get maxclients1) "maxclients"2) "10000" |
运行过程中调整参数
|
1
|
127.0.0.1:6379> config set maxclients 10001 |
4.3 查看slow log
|
1
2
3
4
5
6
|
127.0.0.1:6379> SLOWLOG get127.0.0.1:6379> SLOWLOG get 101) 1) (integer) 0 2) (integer) 1448413479 3) (integer) 124211 4) 1) "FLUSHALL" |
确认slow log条数设定
|
1
|
127.0.0.1:6379> SLOWLOG len |
清空slow log
|
1
|
127.0.0.1:6379> SLOWLOG reset |
5. 数据持久化
5.1 快照(snapshot)
5.1.1 在设定文件中设置快照
|
1
2
3
4
|
save <seconds> <changes> 开启快照,并设定保存快照到硬盘的频率rdbcompression yes/no 保存快照的时候,是否压缩dbfilename dump.rdb 指定快照的文件名(Append Only File也保存在此)dir /var/lib/redis/ 指定快照存放的场所 |
5.1.2 手动创建快照
在命令行执行save或bgsave命令
|
1
2
|
127.0.0.1:6379> SAVEOK |
5.2 日志备份(Append Only File)
类似于mysql的binlog,将操作都记录在log里。快照达不到要求保存的精度时,和快照结合使用,不建议单独使用。默认间隔是1秒,可以修改。
5.2.1 在设定文件中设置AOF
|
1
2
3
4
|
appendonly yes 开启Append Only Fileappendfilename "appendonly.aof" 指定日志文件名appendfsync always/everysec/no 指定写日志的频率no-appendfsync-on-rewrite no 当有bgsave等其他进程执行fsync()时,AOF和appendfsync none动作一样 |
5.3 还原
要恢复Redis的数据只需移动 Redis 的备份文件(dump.rdb,appendonly.aof)到 Redis 目录,然后启动服务器。
为了得到你的 Redis 目录,使用命令如下所示:
|
1
2
3
|
127.0.0.1:6379> config get dir1) "dir"2) "/var/lib/redis" |
6. 后记
本文简单介绍了Redis的安装及使用,接下来介绍主从同步,负荷分散。
Redis系列之(一):10分钟玩转Redis(转)的更多相关文章
- Redis系列之(一):10分钟玩转Redis
1. Redis介绍 Redis是一个开源的使用ANSI C语言编写.基于内存的Key-Value数据库. 它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集 ...
- 10分钟快速入门Redis
Redis安装 来源:https://github.com/jaywcjlove/handbook 官方编译安装 $ wget http://download.redis.io/releases/re ...
- 10分钟彻底理解Redis的持久化机制:RDB和AOF
作者:张君鸿 juejin.im/post/5d09a9ff51882577eb133aa9 什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客 ...
- 10分钟彻底理解Redis持久化和主从复制
在这篇文章,我们一起了解 Redis 使用中非常重要的两个机制:Reids 持久化和主从复制. 什么是 Redis 持久化? Redis 作为一个键值对内存数据库(NoSQL),数据都存储在内存当中, ...
- 10 分钟彻底理解 Redis 的持久化和主从复制
在这篇文章,我们继续有关Redis方面知识的学习,一起了解一下其中一个非常重要的内容:Redis的持久化机制. 什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在 ...
- Redis数据类型简介(十分钟快速学习Redis)
如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...
- Docker系列之(一):10分钟玩转Docker(转)
1.前言 进入云计算的时代,各大云提供商AWS,阿里云纷纷推出针对Docker的服务,现在Docker是十分火爆,那么Docker到底是什麽,让我们来体验一下. 2.Docker是什麽 Docker是 ...
- Docker系列之(一):10分钟玩转Docker
1.前言 进入云计算的时代,各大云提供商AWS,阿里云纷纷推出针对Docker的服务,现在Docker是十分火爆,那么Docker到底是什麽,让我们来体验一下. 2.Docker是什麽 Docker是 ...
- mongoDB系列之(一):10分钟玩转mongoDB
1. mongoDB是什麽 mongodb是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key-Value形式. 存储在集合中的文档,被存储为键-值对的形式.键用于唯一标识一个文档,为 ...
随机推荐
- 准备踏入IT编程的学子们,你们第一门编程语言选谁? Are You Ready? Go!
Are You Ready? Go! ——第一门编程语言选谁? 金旭亮 说明: 这篇文章是专门针对大学低年级学生(和其他软件开发初学者)写的,如果你己经是研究生或本科高年级学生,请将这篇文章转发给你的 ...
- UVa 103 - Stacking Boxes (LIS,打印路径)
链接:UVa 103 题意:给n维图形,它们的边长是{d1,d2,d3...dn}, 对于两个n维图形,求满足当中一个的全部边长 依照随意顺序都一一相应小于还有一个的边长,这种最长序列的个数,而且打 ...
- zoj 3822 Domination (可能性DP)
Domination Time Limit: 8 Seconds Memory Limit: 131072 KB Special Judge Edward is the headm ...
- 从lca到树链剖分 bestcoder round#45 1003
bestcoder round#45 1003 题,给定两个点,要我们求这两个点的树上路径所经过的点的权值是否出现过奇数次.如果是一般人,那么就是用lca求树上路径,然后判断是否出现过奇数次(用异或) ...
- Hadoop认知--在不同的阶段
入门阶段 出于兴趣,及工作中的简单有用,大约经过1个月的时间,完毕了对Hadoop的基本认知. 在这个月中我干了例如以下几件事 1.大体看了<Hadoop权威指南>.把里面的代码手工码了一 ...
- Net 高效开发
Net 高效开发之不可错过的实用工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件,内存 ...
- SharePoint使用BCS开发你第一个应用程序(一)
SharePoint使用BCS开发你第一个应用程序(一) 本系列教你使用BCS(Business Connectivity Service)创建OBA(Office business ...
- Linux - SVN下载项目
SVN下载项目 本文地址:http://blog.csdn.net/caroline_wendy 使用SVN.在Git上下载项目. $ mkdir chunyu_trunk //创建目录 $ ls / ...
- effective c++ 条款3 use const whereever you can
1 const 传达的意思应该是这个变量是常量不能更改 2 const 在 * 左边表示数据是const,在右边表示指针是const // char greeting[] = "hello& ...
- 我只是不甘心-------Day51
回放假回家一天,完全断网,天气也很给力配合.水蓝色的天空.白云,抬眼,我没有看到刺目的光芒,但仍眼眼睛刺痛.已经缩小眼,我试图打开眼睛,就像眼泪都流出来了,它不会擦到沙,这是很多其他的没地方. 哥哥去 ...