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

    # 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的安装及使用,接下来介绍主从同步,负荷分散。

  • 相关阅读:
    BFS visit tree
    Kth Largest Element in an Array 解答
    Merge k Sorted Lists 解答
    Median of Two Sorted Arrays 解答
    Maximal Square 解答
    Best Time to Buy and Sell Stock III 解答
    Best Time to Buy and Sell Stock II 解答
    Best Time to Buy and Sell Stock 解答
    Triangle 解答
    Unique Binary Search Trees II 解答
  • 原文地址:https://www.cnblogs.com/ee900222/p/redis_1.html
Copyright © 2020-2023  润新知