redis学习笔记

redis学习笔记

redis版本为2.8.9

字符串类型

字符串类型是redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。一个字符串类型键允许存储的数据的最大容量为512MB。

  • set key value:赋值
  • get key:取值
  • append key value:向键值的末尾追加value,如果键不存在,则将该键的值设置为value,返回值是追加后的字符串的总长度
  • strlen key:返回键值的长度
  • mget key1 key2 key3...:返回多个键的值
  • mset key1 val1 key2 val2...:设置多个键值

使用get key键不存在时会报错:(error) ERR unknown command 'key'

递增与递减

  • incr key:默认递增为1
  • incrby key num:递增为指定的num
  • decr key默认递减1
  • decrby key num递减为指定的num
  • incrbyfloat key num递增为指定的num值,numfloat类型可以是负数

位操作

  • getbit key offset:获取一个字符串类型键指定位置的二进制的值,索引从0开始,如果获取的二进制的索引超出了键值的二进制实际长度则默认位值是0
  • setbit key offset value:设置字符串类型键值指定位置的二进制位的值,返回值是该位置的旧值。如果要设置的位置超过了键值二进制的长度,setbit命令会自动将中间的二进制位设置为0,同理,设置一个不存在的键的指定二进制位的值会自动将前面的位赋值为0
  • bitcount key [start] [end] :获得字符串类型键中值是1的二进制为的个数
  • bitop operation destkey key:对多个字符串类型键进行运算,并将结果存储在destkey参数指定的键中。bitop命令支持的运算操作有andorxornot

散列类型

散列类型是一种字典结构,其存储了字段和字段值的映射,但是字段值只能是字符窜,不支持其他数据类型,也就是说散列类型不能嵌套其他的数据类型,一个散列类型键可以包含至多232-1个字段。
散列类型适合存储对象:使用对象类别和id构成键名,使用字段表示对象的属性名,字段存储属性值。

  • hset key field value:给字段赋值
  • hget key field:获取字段的值
  • hmset key field1 val1 field2 val2...:给多个字段赋值
  • gmget key field1 field2...:取出多个字段的值
  • hgetall key:返回字段和字段值组成的列表
  • hexists key field:判断一个字段是否存在,存在返回1,不存在返回0,键不存在也会返回0
  • hsetnx key field value:当字段不存在时赋值,若字段已存在则不做任何改变
  • hincrby key field increment:增加指定的increment的值
  • hdel key field [field ...]:删除一个或多个字段,返回值为删除字段的个数
  • hkeys key:只获取字段名
  • hvals key:只获取字段值
  • hlen key:获取字段个数

列表类型

列表类型可以储存一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段

  • lpush key value [value... ]:向列表左边添加一个或多个元素,返回值表示增加元素后的列表长度
  • rpush key value [value...]:向列表右边添加一个或多个元素,返回值表示增加元素后的列表长度
  • lpop key:从列表左端弹出一个元素
  • rpop key:从列表右端弹出一个元素
  • llen key:获取列表中元素的个数
  • lrange key start top:获取从starttop之间的所有元素,包含两端元素。redis起始索引为0。lrange在获取列表片段的同时不会像lpoprpop一样删除元素。lrange也支持负数索引,-1表示最右边第一个元素,依次类推
  • lrem key count value:删除列表中前count个值为value的元素,返回值是实际删除元素的个数
    • count > 0时,lrem命令会从左边开始删除
    • count < 0时,lrem命令会从右边开始删除前count个值为value的元素
    • count = 0时,lrem命令会删除所有值为value的元素
  • lindex key index:获得指定索引的元素值
  • lset key index value:设置指定索引的元素值
  • ltrim key start end:删除指定范围之外的所有元素
  • linsert key before|after pivot valuelinsert命令会先在列表中查找值为pivot的元素,然后根据第二个参数是before还是after来决定将value插入到该元素的后面还是前面
  • rpoplpush source destination:将元素从一个列表转移到另一个列表

集合类型

集合中的每个元素都是不同的,且没有顺序。一个集合类型键可以储存至多232-1个字符串

  • sadd key member [member...]:增加一个或多个元素,如果键不存在会自动创建,返回值是成功加入的元素数量
  • srem key member [member...]:删除一个或多个元素
  • smembers key:返回集合中所有元素
  • sismember key member:判断元素是否在集合中,存在返回1,不存在返回0
  • sdiff key [key...]:对多个集合执行差集运算。集合A与集合B的差集表示为A-B,代表所有属于A且不属于B的元素构成的集合。当传入多个键时,sdiff命令会先计算前面两个集合的差集,然后用所得的结果去计算与下一个集合的差集
  • sinter key [key...]:该命令用来对多个集合执行交集运算
  • sunion key [key...]:该命令用来对多个集合执行并集运算
  • scard key:获取集合中元素个数
  • sdiffstore destination key [key...]sinterstore destination key [key...]sunionstore destination key [key...]:将运算结果存储在destination
  • srandmember key [count]:随机从集合中获取一个或count个元素,根据count正负不同,具体表现也不同:
    • count > 0时,该命令会随机从集合中获得count个不重复的元素。如果大于集合中元素个数,则返回集合中所有元素
    • count < 0时,该命令会随机从集合中获取|count|个元素,这些元素可能会相同
    • spop key:从集合中随机弹出一个元素

有序集合

在集合类型的基础上有序集合为集合中的每个元素都关联了一个分数。集合中的每个元素不同,但是它的分数可以相同

  • zadd key score member [score member...]:向集合中添加一个或多个元素及它的分数,如果该元素已存在则用新的分数替换原来的分数,返回值是新加入集合的个数
  • zscore key member:获得元素的分数
  • zscore key start stop [withscores]:按照元素分数从小到大的顺序返回索引从startstop之间的所有元素,包含两端。如果要显示分数则在命令尾部加上withscores
  • zrevrange key start stop [withscores]:按照元素从大到小输出结果
  • zrangebyscore key min max [withscores] [limt offset count]:返回指定分数范围的元素
  • zincrby key increment member:给member元素的分数增加increment分,返回更改后的分数
  • zcard key:获取元素中集合的数量
  • zcount key min max:获取指定分数范围内的元素个数
  • zrem key member [member...]:删除一个或多个元素,返回值是成功删除的元素的数量
  • zremrangebyrank key start stop:按照排名范围删除元素,返回值是成功删除的元素的数量
  • zremrangebyscore key min max:按照分数范围删除元素,返回值是成功删除的元素的数量
  • zrank key member:获得元素的排名
  • zinterstore destination numkeys key [key...] [weights weight [weight...]] [aggregate sum|min|max]:计算有序集合的交集,并将结果储存在destination键中,返回值为destination键中的元素个数

事务

redis的事务是是一组命令的集合。一个事务中的命令要么都执行,要么都不执行。

  • multi:开启事务
  • exec:执行事务队列中的命令
  • watch:监控一个或多个键,一旦其中有一个键被修改,之后的事务就不会再执行

执行multi开启事务之后,再执行其他命令,如果没有报错,就会返回QUEUED,表示已经将这些命令放入等待执行的事务队列中了,当我们把所有需要执行的命令都发给了redis之后,再执行execredis就会执行事务队列中的命令,返回值就是这些命令的返回值列表。如果执行命令时出现语法错误,及时是语法正确的命令也不会执行;如果出现运行错误,比如使用散列类型的命令操作集合类型的键,即使执行命令报错,之后的命令也会继续执行(redis不支持回滚功能)。

过期时间

  • expire key seconds:设置一个键的有效期,单位为秒,返回值为1表示设置成功,0表示键不存在或设置失败
  • pexpire key millisecond:单位为毫秒
  • ttl key:返回一个键的剩余时间,当键不存在时返回-2,如果键没有设置过过期时间,返回-1
  • persist key:取消键的过期时间设置,成功返回1,失败返回0

除了persist命令之外,使用setget命令为键赋值的同时也会取消键的过期时间

排序

  • sort key [alpha] [desc] [limit offset count]:可以对列表类型、集合类型、和有序集合类型键进行排序,并且可以完成与数据库中的连接查询类似的任务;除了数字以外,还可以通过alpha参数按照字典顺序排列非数字元素
  • byby参数的语法为by keykey是一个参考键,它可以是一个字符串类型键或散列类型的某个字段(表示为键名->字段名)
  • get:不在返回元素自身的值,而是get参数中指定的键值。支持字符串类型和散列类型的键,规则和by参数一样
  • store:将排序的结果保存在指定的键中

如果使用了by参考键,sort命令将不会依据自身元素的值进行排序,而是对每个元素使用元素的值替换参考键中的第一个"*"并获取其值,然后依据该值对元素排序。
当参考键名为一个常量键时,sort命令将不会执行排序操作;如果几个参考键值相同,sort命令会再比较元素本身的值来决定元素的顺序
一个sort命令中可以有多个get参数,by参数只能有一个

消息通知

使用redis实现任务队列

队列可以使用redis的列表类型的lpushrpop命令来实现。生产者将任务使用lpush命令加入到某个键中,消费者使用rpop命令从改键中去除任务

  • brpop key [key...] timeout命令
    brpop命令与rpop命令相似,区别是当列表中没有元素时brpop会一直阻塞,直到有新的元素加入。timeout单位为秒,当参数为0时,表示不显示超时时间,如果没有新的元素加入列表就会永远阻塞
队列优先级

brpop可以传递多个键,如果所有键都没有元素则阻塞,如果有一个键有元素则会从该键弹出该元素,如果多个键都有元素,按照从左到右的顺序取第一个键中的一个元素。借次特性可以实现区分优先级的任务队列

“发布/订阅”模式

“发布/订阅”模式中包含两种角色,分别是发布者和订阅者。订阅者可以订阅一个或若干个频道(channel),而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都回收到此消息。

  • publish channel message:想channel频道发送消息
    publish命令的返回值表示接受这条消息的订阅者数量。发出去的消息不能持久化
  • subscribe channel [channel...]:订阅频道
    执行此命令后客户端会进入订阅状态,此状态下客户端只能使用subscribeunsubscribepsubscribepunsubscribe这四个属于“发布\订阅”模式的命令。
    消息类型取值:
  • subscribe:表示订阅成功的反馈信息,第二个值是订阅成功的频道,第三个值是当前客户端订阅的频道数量
  • message:表示接收到的消息,第二个值是产生消息的频道名称,第三个值是消息内容
  • unsubscrie:表示成功取消订阅某个频道,第二个值是对应的频道名称,第三个值是当前客户端订阅的频道数量,如果该值为0,客户端就会退出订阅状态
按照规则订阅
  • psubscribe:订阅指定规则的频道,如psubscribe channel.?*可以匹配channel.1channel.10,但不会匹配channel.
    该命令的第一个返回值表示这条消息是通过psubscribe命令订阅频道而收到的,第二个值表示订阅时使用的通配符,第三个之表示实际收到的频道命令,第四个值表示消息内容
    该命令可以重复订阅一个频道,向该频道发送消息时,订阅了几次,就发送几次
    punsubscribe:退订指定的规则
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷是一个教育机构,他们提供了一份关于Redis学习笔记。根据提供的引用内容,我们可以了解到他们提到了一些关于Redis配置和使用的内容。 首先,在引用中提到了通过执行命令"vi /redis-6.2.6/redis.conf"来编辑Redis配置文件。这个命令可以让你进入只读模式来查询"daemonize"配置项的位置。 在引用中提到了Redis会根据键值计算出应该送往的插槽,并且如果不是该客户端对应服务器的插槽,Redis会报错并告知应该前往的Redis实例的地址和端口。 在引用中提到了通过修改Redis的配置文件来指定Redis的日志文件位置。可以使用命令"sudo vim /etc/redis.conf"来编辑Redis的配置文件,并且在文件中指定日志文件的位置。 通过这些引用内容,我们可以得出结论,尚硅谷的Redis学习笔记涵盖了关于Redis的配置和使用的内容,并提供了一些相关的命令和操作示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis学习笔记--尚硅谷](https://blog.csdn.net/HHCS231/article/details/123637379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Redis学习笔记——尚硅谷](https://blog.csdn.net/qq_48092631/article/details/129662119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值