String 集成 Redis 笔记

本文介绍Redis的五种数据结构:String、List、Set、Hash、ZSet及其命令,涵盖启动、持久化、复制、事务等特性。重点讲解不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1. redis 的5种结构

结构类型

结构存储的值

结构的读写能力

STRING

可以是字符串、整数或者浮点数

对整个字符串或者字符串的其中一部分执行操作;对整数和浮点数执行自增(increment)或者自减(decrement)操作

LIST

一个链表,链表上的每个节点都包含了一个字符串

从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值查找或者移除元素

SET

包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二、各不相同的

添加、获取、移除单个元素;检查一个元素是否存在于集合中;计算交集、并集、差集;从集合里面随机获取元素

HASH

包含键值对的无序散列表

添加、获取、移除单个键值对;

获取所有键值对

ZSET(有序集合)

字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定

添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素

注:集合(SET)内元素不可重复, 列表内元素可以重复

散列的键值对不可重复

有序集合的成员不可重复

2. redis命令

类别

命令

行为

字符串命令

GET

 

获取存储在给定键中的值

 

SET

设置存储在给定键中的值

 

DEL

删除存储在给定键中的值(这个命令可以用于所有类型)

 

INCR

INCR key-name------将键存储的值加上1

 

INCRBY

INCRBY key-name-------将键存储的值减去1

 

DECRBY

DECRBY key-name amount------将键存储的值减去整数amount

 

INCRBYFLOAT

INCRBYFLOAT key-name amount------将键存储的值加上浮点数amount, 这个命令在Redis 2.6或以上的版本可用

列表命令

LRANGE

LRANGE key-name start end-----获取列表在给定范围上的所有值

 

LPUSH(RPUSH)

LPUSH key-name value [value...]将给定值推入列表的左端(右端)

 

LINDEX

LINDEX key-name offset ---- 获取列表在给定位置上的的那个元素

 

LPOP(RPOP)

LPOP key-name------从列表的左端(右端)弹出一个值,并返回被弹出的值(被弹出的远处将不在列表中)

 

LTRIM

LTRIM key-name start end 对列表进行修剪,只保留从start偏移量到end偏移量范围内的元素,其中偏移量为start和偏移量为end的元素也会被保留

集合命令

SADD

sadd key item [item...] 将给定元素添加到集合

 

SMEMBERS

smembers 返回集合包含的所有元素

 

SISMEMBER

sismember key-name item ----- 检查给定元素是否存在于集合中

 

SREM

srem key-name item [item ....] -----如果给定的元素存在于集合中,那么移除这个元素

 

SCARD

scard key-name 返回集合包含元素的数量

 

SRANDMEMBER

SRANDMEMBERkeyname[count]——从集合里面随机地返回一个或多个元素。当count为正数时,命令返回的随机元素不会重复;当count为负数时,命令返回的随机元素可能会出现重复

 

SPOP

spop key-name ----- 随机地移除集合中的一个元素,并返回被移除的元素

 

SMOVE

smove source-key dest-key item------如果集合sourcekey包含元素item,那么从集合sourcekey里面移除元素item,并将元素item添加到集合destkey中;如果item被成功移除,那么命令返回1,否则返回0

 

SDIFF

SDIFF key-name[key-name...]——返回那些存在于第一个集合、但不存在于其他集合中的元素(数学上的差集运算

 

SDIFFSTORE

SDIFFSTORE dest-key key-name[key-name...]——将那些存在于第一个集合但并不存在于其他集合中的元素(数学上的差集运算)存储到destkey键里面

 

SINER

siner key-name [key-name]-----返回哪些同时存在于所有集合中的元素(数学上的交集运算)

 

SINTERSTORS

SINTERSTORE dest-key key-name[key-name...]——将那些同时存在于所有集合的元素(数学上的交集运算)存储到dest-key键里面

 

SUNION

SUNIONkeyname[keyname...]——返回那些至少存在于一个集合中的元素(数学上的并集计算)

 

SUNIONSTORE

SUNIONSTOREdestkeykeyname[keyname...]——将那些至少存在于一个集合中的元素(数学上的并集计算)存储到destkey键里面

散列命令

HSET

在散列里面关联起给定的键值对

 

HGET

获取指定散列键的值

 

HGETALL

获取散列包含的所有键值对

 

HDEL

如果给定键存在于散列里面,那么移除这个键

 

HLEN

hlen key-name-----返回散列包含的键值对数量

 

HMGET

HMGET key-name key [key...]——从散列里面获取一个或多个键的值

 

HMSET

HMSET key-name key [key...]-----HMGET key-name key[key...]——从散列里面获取一个或多个键的值

 

HEXISTS

HEXISTS key-name key——检查给定键是否存在于散列中

 

HKEYS

hkeys key-name----获取散列包含的所有键

 

HVALS

hvals key-name-----获取散列包含的所有值

 

HINCRBY

hincrby key-name key increment----将键key存储的值加上整数increment

 

HINCRBYFLOAT

hincrbyfloat key-name key increment-----将键key存储的值加上浮点数increment

有序集合

ZADD

zadd key-name score member [score member...] 将一个带有给定分值得成员添加到有序集合里面

 

ZRANGE

zrange key-name start stop [withscores ]根据元素在有序排列中所处的位置,从有序集合里面获取多个元素

 

ZRANGEBYSCORE

ZRANGEkeynamestartstop[WITHSCORES]——返回有序集合中排名介于start和stop之间的成员,如果给定了可选的WITHSCORES选项,那么命令会将成员的分值也一并返回

 

ZREM

zrem key-name member[member...] 如果给定成员存在于有序集合,那么移除这个元素

 

ZCARD

ZCARD key-name----返回有序集合包含的成员数量

 

zincrby

zincrbu key-name increment member-----将member成员的分值加上increment

 

zcount

zcount key-name min max------返回分值介于min和max之间的成员数量

 

zrank

zrank key-name member-----返回成员member在有序集合中的排名

 

zscore

zscore key-name member-----返回成员member的分值

 

ZREVRANK

ZREVRANK key-name member----返回有序集合里成员member的排名,成员按照分值从小到大排列

 

ZREVRANGE

ZREVRANGE key-name start stop [WITHSCORES]——返回有序集合给定排名范围内的成员,成员按照分值从大到小排列

 

ZRANGEBYSCORE

ZRANGEBYSCORE key min max[WITHSCORES][LIMIToffsetcount]——返回有序集合中,分值介于min和max之间的所有成员

 

ZREVRANGEBYSCORE

ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIToffsetcount]——获取有序集合中分值介于min和max之间的所有成员,并按照分值从大到小的顺序来返回它们

 

ZREMRANGEBYRANK

ZREMRANGEBYRAN Kkey-name start stop——移除有序集合中排名介于start和stop之间的所有成员

 

ZREMRANGEBYSCORE

ZREMRANGEBYSCORE key-name min max——移除有序集合中分值介于min和max之间的所有成员

 

ZINTERSTORE

ZINTERSTORE dest-key key-count key[key...] [WEIGHTS weigh t[weight...]][AGGREGATESUM|MIN|MAX]——对给定的有序集合执行类似于集合的交集运算(使用的是默认的聚合函数sum)

 

ZUNIONSTORE

ZUNIONSTORE dest-key key-count key[key...][WEIGHTS weight[weight...]][AGGREGATE SUM|MIN|MAX]——对给定的有序集合执行类似于集合的并集运算(使用的是min函数)

通用

SORT

SORT source-key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern...]][ASC|DESC] [ALPHA] [STORE dest-key]——根据给定的选项,对输入列表、集合或者有序集合进行排序,然后返回或者存储排序的结果

事务

MULTI和EXEC

 
 

WATCH

对键进行监视,如果在用户执行exec命令的时间内,有其他客户端抢先对被监视的键进行了替换、更新或删除等操作,那么用户尝试执行exec命令时会失败并返回错误

 

UWATCH

unwatch命令可以在watch命令执行之后,multi命令执行之前对连接进行重置

 

discard

 

处理过期时间

PERSIST

PERSIST key-name-----移除键的过期时间

 

TTL

TTL key-name-----查看给定键距离过期还有多少秒

 

EXPIRE

EXPIRE key-name seconds-----让给定键在指定的秒数之后过期

 

EXPIREAT

EXPITEAT key-name timestamp-----将给定键的过期时间设置为给定的UNIX时间戳

 

PTTL

PTTL key-name-----查看给定键距离过期时间还有多少毫秒

 

PEXPIRE

PEXPIRE key-name milliseconds----让给定键在指定的毫秒数之后过期,这个命令在Redis 2.6或以上版本可用

 

PEXPIREAT

PEXPIRE key-name timestamp-milliseconds----将一个毫秒级精度的UNIX时间戳设置为给定键的过期时间

2.2 扩展

 

3. 启动redis 命令

服务端:redis-server

客户端:redis-cli

 

4.redis发布和订阅

命令

用例和描述

SUBSCRIBE

SUBSCRIBE channel [channel ...]----订阅给定的一个或多个频道

UNSUBSCRIBE

UNSUBSCRIBE [channel [channel ...]] ----退订给定的一个或多个频道, 如果执行时没有给定任何频道,那么退订所有频道

PUBLISH

PUBLISH channel message----向给定频道发送信息

PSUBSCRIBE

PSUBSCRIBE pattern [pattren ...]-----订阅与给定模式相匹配的所有频道

PUNSUBSCRIBE

PUNSUBSCRIBE [pattern [pattren ...]]-----退订给定的模式,如果执行时没有给定任何模式,那么退订所有模式

 

5. 快照持久化

命令

用例和描述

SAVE

创建一个快照(同步)在快照创建完毕前,不再响应任何其他命令

BGSAVE

创建快照(异步), 调用fock创建一个子进程,然后子进程负者将快照写入硬盘,

父进程继续处理命令请求

5.1. 个人开发

5.2. 对日志进行聚合计算

 

6. AOF持久化

AOF持久化通过appendonly yes配置选项来打开

6.1 appendfsync选项及同步频率

选项

同步频率

always

每个Redis写命令都要同步写入硬盘. 这样做会严重降低Redis的速度

everysec

每秒执行一次同步,显示地将多个写命令同步到硬盘

no

让操作系统来决定应该何时进行同步

 

7. 复制

 

8. 事务

redis 事务是通过MULTI为开始,以EXEC为结束。

 

9. 分布式锁

9.1 乐观锁:

在其他客户端对数据修改,则告诉执行锁的客户端数据被修改了,但不或阻止其他客户端对数据的修改

9.2 细粒度锁

 

10. 哨兵机制

10.1 多个哨兵可以提高读的性能

10.2 数据分区

10.2.1 数据分区,redis-集群配置步骤

  • 配置文件redis-{port}.conf

文件内容

port 6379

logfile 6379.log

cluster-enabled yes

cluster-node-timeout 15000

cluster-config-file nodes-6379.conf

  • 启动节点 :redis-server redis-6379.conf
  • 节点握手 cluster meet 127.0.0.1 6380
  • 分配槽 cluster addslots 1 2 3
  • 主从复制 cluster replicate <masterid>

10.2.2 ruby创建集群

redis-trib.rb create --replocas 1 127.0.0.1:6379 127.0.0.1:6380 ......

 

11. 降低内存占用

11.1 短结构

11.1.1 压缩列表

rpoplpush

11.2 分片式散片

CRC32进行分片

11.3 打包存储二进制位和字节

 

12.redis 扩展

12.1 扩展读性能

1. 主从复制树

2. ssh隧道进行加密压缩

11.2 扩展写性能和内存容量

 

12.3 扩展搜索查询量

slave-read-only 控制redis是否为只读服务器

 

摘抄自《redis实战》

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值