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可以直接安装

# yum install epel-release (centos 7可以直接安装epel源)
# yum install redis

2.2 启动/停止Redis

# redis-server /etc/redis.conf

# systemctl start redis
# systemctl stop redis

3. 使用Redis

3.1 Redis-cli命令行操作KV

连接到Redis

# redis-cli -p port
# redis-cli

ping

127.0.0.1:6379> ping
PONG

设置键值

127.0.0.1:6379> set testkey "hello"
OK

查询键

127.0.0.1:6379> get testkey
"hello"

删除键

127.0.0.1:6379> del testkey
(integer) 1

设定有效期限

127.0.0.1:6379> setex test 10 111
OK

用EXPIRE key s 设定过期时间  毫秒用PEXPIRE

127.0.0.1:6379> EXPIRE test11 300
(integer) 1

用TTL key 查看过期时间  毫秒用PTTL

127.0.0.1:6379> TTL test11
(integer) 288

用PERSIST key 取消过期时间

127.0.0.1:6379> PERSIST test11
(integer) 1

3.2 高级功能

3.2.1 自增,自减等,INCR、DECR、INCRBY、SORT

127.0.0.1:6379> set counter 100
OK
127.0.0.1:6379> incr counter
(integer) 101
127.0.0.1:6379> incr counter
(integer) 102
127.0.0.1:6379> decr counter
(integer) 101

3.2.2 事务

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> set test11 111111
QUEUED
127.0.0.1:6379> set test12 121212
QUEUED
127.0.0.1:6379> incr counter
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) OK
3) (integer) 102

3.2.3 HyperLogLogs

Redis 在 2.8.9 版本添加了 HyperLogLog 算法。

3.2.4 发布/订阅 功能

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道。

在一个客户端订阅频道 redisChat

127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1

在另一个客户端,发送消息到频道 redisChat,订阅者就能接收到消息

发布端:

127.0.0.1:6379> PUBLISH redisChat "redis haha"
(integer) 1

订阅端:

127.0.0.1:6379> SUBSCRIBE redisChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1
1) "message"
2) "redisChat"
3) "redis haha"

3.3查看Redis状态

127.0.0.1:6379> info

info输出的信息很多,可以指定输出的部分

127.0.0.1:6379> info stats

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 其他命令

查看记录数

127.0.0.1:6379> dbsize

查看所有KEY

127.0.0.1:6379> KEYS *

列出所有客户端连接

127.0.0.1:6379> CLIENT LIST

关闭ip:port的客户端

127.0.0.1:6379> CLIENT KILL 127.0.0.1:11902

清空所有数据库的所有key

127.0.0.1:6379> FLUSHALL

清空当前数据库中所有key

127.0.0.1:6379> FLUSHDB

返回最后一次成功保存数据到磁盘的时间,以UNIX时间戳格式表示

127.0.0.1:6379> LASTSAVE

返回当前服务器时间,以UNIX时间戳格式表示

127.0.0.1:6379> TIME

连接到其他数据库(默认数据库是0)

127.0.0.1:6379> SELECT 1
OK

将当前数据库的 key 移动到指定的数据库

127.0.0.1:6379> MOVE test2 1
(integer) 1

4. 设定文件

4.1 /etc/redis.conf

daemonize no      是否以后台daemon方式运行
timeout 0 请求超时时间
maxclients 10000 最大连接数 maxmemory <bytes> 最大内存
maxmemory-policy volatile-lru 达到最大内存时的LRU驱逐策略
maxmemory-samples 3 随机抽取n个key执行LRU
hash-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 查看最大连接数

127.0.0.1:6379> config get maxclients
1) "maxclients"
2) "10000"

运行过程中调整参数

127.0.0.1:6379> config set maxclients 10001

4.3 查看slow log

127.0.0.1:6379> SLOWLOG get
127.0.0.1:6379> SLOWLOG get 10
1) 1) (integer) 0
2) (integer) 1448413479
3) (integer) 124211
4) 1) "FLUSHALL"

确认slow log条数设定

127.0.0.1:6379> SLOWLOG len

清空slow log

127.0.0.1:6379> SLOWLOG reset

5. 数据持久化

5.1 快照(snapshot

5.1.1 在设定文件中设置快照

save <seconds> <changes>      开启快照,并设定保存快照到硬盘的频率
rdbcompression yes/no 保存快照的时候,是否压缩
dbfilename dump.rdb 指定快照的文件名(Append Only File也保存在此)
dir /var/lib/redis/ 指定快照存放的场所

5.1.2 手动创建快照

在命令行执行save或bgsave命令

127.0.0.1:6379> SAVE
OK

5.2 日志备份(Append Only File

类似于mysql的binlog,将操作都记录在log里。快照达不到要求保存的精度时,和快照结合使用,不建议单独使用。默认间隔是1秒,可以修改。

5.2.1 在设定文件中设置AOF

appendonly yes                     开启Append Only File
appendfilename "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 目录,使用命令如下所示:

127.0.0.1:6379> config get dir
1) "dir"
2) "/var/lib/redis"

6. 后记

本文简单介绍了Redis的安装及使用,接下来介绍主从同步,负荷分散。

Redis系列之(一):10分钟玩转Redis的更多相关文章

  1. Redis系列之(一):10分钟玩转Redis(转)

    1. Redis介绍 Redis是一个开源的使用ANSI C语言编写.基于内存的Key-Value数据库. 它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集 ...

  2. 10分钟快速入门Redis

    Redis安装 来源:https://github.com/jaywcjlove/handbook 官方编译安装 $ wget http://download.redis.io/releases/re ...

  3. 10分钟彻底理解Redis的持久化机制:RDB和AOF

    作者:张君鸿 juejin.im/post/5d09a9ff51882577eb133aa9 什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客 ...

  4. 10分钟彻底理解Redis持久化和主从复制

    在这篇文章,我们一起了解 Redis 使用中非常重要的两个机制:Reids 持久化和主从复制. 什么是 Redis 持久化? Redis 作为一个键值对内存数据库(NoSQL),数据都存储在内存当中, ...

  5. 10 分钟彻底理解 Redis 的持久化和主从复制

    在这篇文章,我们继续有关Redis方面知识的学习,一起了解一下其中一个非常重要的内容:Redis的持久化机制. 什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在 ...

  6. Redis数据类型简介(十分钟快速学习Redis)

    如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...

  7. Docker系列之(一):10分钟玩转Docker(转)

    1.前言 进入云计算的时代,各大云提供商AWS,阿里云纷纷推出针对Docker的服务,现在Docker是十分火爆,那么Docker到底是什麽,让我们来体验一下. 2.Docker是什麽 Docker是 ...

  8. Docker系列之(一):10分钟玩转Docker

    1.前言 进入云计算的时代,各大云提供商AWS,阿里云纷纷推出针对Docker的服务,现在Docker是十分火爆,那么Docker到底是什麽,让我们来体验一下. 2.Docker是什麽 Docker是 ...

  9. mongoDB系列之(一):10分钟玩转mongoDB

    1. mongoDB是什麽 mongodb是时下流行的NoSql数据库,它的存储方式是文档式存储,并不是Key-Value形式. 存储在集合中的文档,被存储为键-值对的形式.键用于唯一标识一个文档,为 ...

随机推荐

  1. 分布式git

    分布式 Git 你现在拥有了一个远程 Git 版本库,能为所有开发者共享代码提供服务,在一个本地工作流程下,你也已经熟悉 了基本 Git 命令.你现在可以学习如何利用 Git 提供的一些分布式工作流程 ...

  2. wordpress 常用函数-wpdb类

    与数据库建立接口 WordPress为用户提供了一系列用于数据库操作的函数类——wpdb.Wpdb类建立在Justin Vincent编写并维护的ezSQL类的基础上. 使用须知 不可直接调用wpdb ...

  3. Ninject中调用webapi卡住的情况解决

    过年这两天在家做项目,把mvc升级到了5.1,webapi升级到了2.1,忽然发现一个问题,在某些页面上ajax调用webapi时会发现卡死现象,CPU也没有被占用,就是网页一些在加载也不报错,经过2 ...

  4. Web前端开发最佳实践(12):JavaScript代码中有大量写死的配置数据?这些数据难以维护,你需要合理组织这些数据

    前言 JavaScript代码基本上都是由业务逻辑和数据组成的,逻辑代码根据数据完成一定的操作.很多数据在代码中是写死的,比如一些URL.显示在界面上的提示信息.页面元素相关的样式值及其他使用到的固定 ...

  5. ASP.NET WebAPI 04 Model绑定

    在前面的几篇文章中我们都是采用在URI中元数据类型进行传参,实际上ASP.NET Web API也提供了对URI进行复杂参数的绑定方式--Model绑定.这里的Model可以简单的理解为目标Ancti ...

  6. Java_集合与泛型

    Collection 集合,集合是java中提供的一种容器,可以用来存储多个数据.在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都是 ...

  7. CSUOJ 1018 Avatar

    Description In the planet Pandora, Jake found an old encryption algorithm. The plaintext, key and ci ...

  8. MySQL Insert语句单个批次数量过多导致的CPU性能问题分析

    [问题] 最近有台服务器比较频繁的CPU报警,表现的特征有CPU sys占比偏高,大量慢查询,大量并发线程堆积.后面开发对insert的相关业务限流后,服务器性能恢复正常. [异常期间线程处理情况] ...

  9. List元素为泛型时的注意事项

    最近的项目赶得非常紧,这节奏跟最近的天气一点也不搭调. 编码的过程,遇到一个关于List的小问题. 在调用List.add(E e)的时候范了一个小毛病,很自然地认为list中存储的是 E  对象的另 ...

  10. JAVAEE——宜立方商城13:订单系统实现、订单生成、Mycat数据库分片

    1. 学习计划 1.订单系统实现 2.订单生成 3.Mycat数据库分片 2. 订单系统 2.1. 功能分析 1.在购物车页面点击“去结算”按钮,跳转到订单确认页面 a) 必须要求用户登录 b) 使用 ...