# Redis
# 参考文档
# 图形化界面
- RESP(已过期),现已更为 RedisInsight
# 简介
# 不同点-与其他类型比较
- 运行在内存中
- Redis 支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载到内存使用。
- Redis 不仅支持简单的 key-value 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。
- Redis 支持主从复制,即 master-slave 模式的数据备份。
# Redis 架构
Redis 主要由有两个程序组成:
- 客户端 redis-cli
- 服务器 redis-server
客户端、服务器可以位于同一台计算机或两台不同的计算机中。
# 数据类型
string
,字符串list
,列表,按照插入顺序hash
,哈希,一般用来存对象set
,无序集合,成员唯一zset
,有序集合,成员唯一,有分数,可排序
# Redis 命令
redis-cli -h host -p port -a password
- 连接远程的 Redis 服务。
- 示例:
redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
# Redis Key 键命令
DEL key
,删除 keyRENAME
,修改名称EXISTS
,是否存在KEYS [pattern]
,查找所有符合条件的 keyTYPE
,返回 key 所存储的值的类型RANDOMKEY
,从当前数据库中随机返回一个 keyRENAMENX
,仅当 newKey 不存在时,再进行修改DUMP
,序列化给定的 keyEXPIRE
,设置过期时间EXPIREAT
,设置过期的时间戳PEXPIREAT
,设置过期的时间戳,以毫秒计PERSIST
,移除过期时间,key 将永久保持TTL
,以秒为单位,返回 key 的剩余过期时间PTTL
,以毫秒为单位,返回 key 的剩余过期时间MOVE
,将当前数据库中的 key 移动到给定的数据库中
# String 命令
SET k v
,设置值GET k
,获取值SETNX k v
,设置值,当 k 不存在时,NX - if not existsMSET k1 v1 k2 v2
,设置多个键值对MSETNX k1 v1 k2 v2
,获取值,当给定的 key 全部不存在的时候MGET k1 k2
,获取多个 key 的值APPEND k new_v
,将值添加到 key 之前绑定的值后面GETRANGE key start end
,获取 key 对应的值的subString,index 的数值是相对于字符串末尾的偏移量,-1 就是最后一个字符GETSET k v
,将 k 的值设置为 v,并返回 k 的旧值SETEX k time v
,将值设为 v,将过期时间设置为timeSTRLEN k
,返回 k 对应的字符串的长度INCR k
,将 k 中存储的数字值加 1INCRBY k x
,将 k 中存储的数字值加 xINCRBYFLOAT
,DECR
,减 1DECRBY
,DECRBYFLOAT
,
# Hash 命令
HSET k f v
,设置一个字段HGET k f
,返回 valueHMSET k f1 v1 f2 v2
,设置多个字段HMGET k f1 f2
,返回 v1 v2HKEYS k
,获取 key 中的所有字段HLEN k
,获取 key 中字段数量HVALS k
,获取所有 valueHGETALL k
,获取所有字段和值HSETNX
,当字段名不存在时设置HSCAN
,HSTRLEN k f
,返回指定 f 的字符串值的长度- ``,
# List 命令
LLEN
,列表长度LSET k index v
,LINDEX k index
,获取指定 index 的元素LRANGE k start end
,获取指定范围的元素LREM k count 'string'
,删除 k 中 count 个等于 string 的值
# Set命令
SMEMBERS k
,返回集合中的所有成员SISMEMBER k v
,v 是否在集合 k 中SADD k v1 v2 v3
,向集合添加值SCARD
,获取成员数SDIFF k1 k2 k3
,返回第一个 set 中独有的元素(不包含在后边的集合中的元素)。SDIFFSTORE new_set k1 k2 k3
,将独有的元素放进 new_set 中。SINTER k1 k2 k3
,所有集合的交集SINTERSTORE new_set k1 k2 k3
,所有集合的交集SMOVE s1 d1 v
,将 value 从 sourceSet 移动到 destinationSUNION k1 k2 k3
,返回并集SUNION new_set k1 k2 k3
,SSCAN
,示例SSCAN myset1 0 match R* 20
# SortedSet 命令
ZADD k score v
,向 k 中添加 value 以及值所对应的分数ZCARD
,返回成员数ZSCORE k v
,返回 v 的分数值ZRANK k v
,返回 v 的排名ZCOUNT k min max
,返回区间内的成员数,包括 min maxZREM k v1 v2
,移除成员ZRANGE
,返回范围内的成员ZRANGEBYLEX
,返回范围内的成员ZRANGEBYSCORE k (1 5
,返回 1 < 分数 <= 5 的成员
# Redis 事务
MULTI
,标记一个事务块的开始EXEC
,执行所有事务块内的命令DISCARD
,取消事务,放弃执行事务块内的所有命令WATCH
,监视一些 key,一旦这些 key 在执行前被改变,则取消事务的执行UNWATCH
,取消对所有 key 的监视
# Redis 连接
AUTH password
,验证密码是否正确PING
,查看服务是否运行QUIT
,关闭当前连接SELECT index
,切换到指定数据库ECHO string
,打印字符串
# Redis 内存优化
# 使用 Redis 作为 LRU 缓存
# Redis 分布式锁
# 算法最低保证
算法只需具备3个特性就可以实现一个最低保障的分布式锁。
- 安全属性: 独享(相互排斥)。在任一时刻,只有一个客户端持有锁。
- 活性 A:无死锁。即便持有锁的客户端崩溃或者网络分裂等,锁依然可以被拿到。
- 活性 B:容错。只要大部分 Redis 节点活着,客户端就可以获取和释放锁。
概括: 独享、无死锁、容错。
# 配置文件
Redis 的根目录中有一个配置文件(redis.conf)。
config get setting_name
,获取配置config set setting_name setting_value
,编辑配置
redis.conf
常用配置项。
port 6379
- 指定 Redis 监听端口,默认端口为 6379
bind 127.0.0.1
- 绑定的主机地址
timeout 300
- 当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能
databases 16
- 设置数据库的数量,默认数据库为 0,可以使用
SELECT <dbid>
命令在连接上指定数据库 id
- 设置数据库的数量,默认数据库为 0,可以使用
save <seconds> <changes>
- 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
- Redis 默认配置文件中提供了三个条件:
- save 900 1
- save 300 10
- save 60 10000
- 分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有 10000 个更改。
loglevel verbose
- 指定日志记录级别,Redis 总共支持四个级别:debug、verbose、notice、warning,默认为 verbose
logfile stdout
- 日志记录方式,默认为标准输出,如果配置 Redis 为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给 /dev/null
daemonize no
- Redis 默认不是以守护进程的方式运行,可以通过该配置项修改,使用 yes 启用守护进程
pidfile /var/run/redis.pid
- 当 Redis 以守护进程方式运行时,Redis 默认会把 pid 写入 /var/run/redis.pid 文件,可以通过 pidfile 指定。
rdbcompression yes
- 指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大
slaveof <masterip> <masterport>
- 设置当本机为 slave 服务时,设置 master 服务的 IP 地址及端口,在 Redis 启动时,它会自动从 master 进行数据同步
requirepass foobared
- 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过
AUTH <password>
命令提供密码,默认关闭
- 设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过
maxclients 128
- 设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息
maxmemory <bytes>
- 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区
# 讨论区
由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。
点击查看评论区内容,渴望您的宝贵建议~
← Redis 目录 Redis 安装配置 →