• 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 111
    OK

    用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 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 事务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    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

    1
    2
    3
    4
    5
    127.0.0.1:6379> SUBSCRIBE redisChat
    Reading 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 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状态

    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 1
    OK

    将当前数据库的 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执行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 查看最大连接数

    1
    2
    3
    127.0.0.1:6379> config get maxclients
    1) "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 get
    127.0.0.1:6379> SLOWLOG get 10
    1) 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> SAVE
    OK

    5.2 日志备份(Append Only File

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

    5.2.1 在设定文件中设置AOF

    1
    2
    3
    4
    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 目录,使用命令如下所示:

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

    6. 后记

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

    专注服务器运维十年,欢迎技术上的交流。微信:ee900222 QQ:176539854
     
    http://www.cnblogs.com/ee900222/p/redis_1.html
  • 相关阅读:
    BZOJ 4445 [Scoi2015]小凸想跑步:半平面交
    BZOJ 3931 [CQOI2015]网络吞吐量:最大流【拆点】
    BZOJ 3698 XWW的难题:有上下界的最大流
    AtCoder ARC097C Sorted and Sorted:dp
    BZOJ 1835 [ZJOI2010]base 基站选址:线段树优化dp
    BZOJ 3329 Xorequ:数位dp + 矩阵快速幂
    BZOJ 1492 [NOI2007]货币兑换Cash:斜率优化dp + cdq分治
    BZOJ 4726 [POI2017]Sabota?:树形dp
    BZOJ 1185 [HNOI2007]最小矩形覆盖:凸包 + 旋转卡壳
    存一些东西
  • 原文地址:https://www.cnblogs.com/softidea/p/5122293.html
Copyright © 2020-2023  润新知