上传网站需要什么软件,建官网个人网站,徐州建立网站,cantos wordpress初识Redis 1、Redis简介2、 Redis数据结构简介3、 Redis命令3.1 字符串3.2 列表3.3 集合3.4 散列3.5 有序集合3.6 发布与订阅3.7 其他命令3.7.1 排序3.7.2 过期时间 如有侵权#xff0c;请联系#xff5e; 如有错误#xff0c;也欢迎批评指正#xff5e; 本篇文章大部分是来… 初识Redis 1、Redis简介2、 Redis数据结构简介3、 Redis命令3.1 字符串3.2 列表3.3 集合3.4 散列3.5 有序集合3.6 发布与订阅3.7 其他命令3.7.1 排序3.7.2 过期时间 如有侵权请联系 如有错误也欢迎批评指正 本篇文章大部分是来自学习《Redis实战》的笔记 1、Redis简介
Redis 是一个远程内存数据库它不仅性能强劲而且还具有复制特性以及为解决问题而生 的 独 一无 二的 数 据 模 型 。 Redis 提供了5种不同类型的数据结构各式各样的问题都可以很自然地映射到这些数据结构上:Redis 的数据结构致力于帮助用户解决问题而不会像其他数据库那 样要求用户扭曲问题来适应数据库。除此之外通过复制、持久化(persistence )和客户端分 片(client -side sharding )等特性用户可以很方便地将Redis 扩展成一个能够包含数百GB 数据、 每秒处理上百万次请求的系统。
需求是否使用redis或者是redis作为主存储还是二级存储取决于程序对性能的要求以及成本问题。
存储类型描述Redis内存存储的非关系型数据库支持五种数据结构字符串、列表、集合、散列、有序集合 支持持久化可以不必像MySQL随机读写、写入临时表不需要查询分析器、优化器进行处理memcached内存存储的键值缓存只支持字符串不支持持久化用户只能用APPEND命令将数据添加到已有字符串的末尾采用的办法是通过黑名单(blacklist)来隐藏列表里面的元素从而避免对元素执行读取、更新、写入MySQL关系型数据库支持ACID事务存在查询分析器、查询优化器
2、 Redis数据结构简介
Redis客户端与服务端交互图【以java为例子】 这里只是简单的介绍一下数据结构以及部分命令
Redis数据结构数据结构命令行为描述示例字符串GET获取存储在给定键中的值get keySET设置存储在给定键中的值set key valueDEL删除存储在给定键中的值del key列表LPUSH将给定的值推入列表的左端lpush key valueRPUSH将给定的值推入列表的右端rpush key valueLPOP从列表的左端弹出一个值并返回被弹出的值lpop keyRPOP从列表的右端弹出一个值并返回被弹出的值rpop keyLINDEX获取列表上给定位置的单个元素lindex key 1LRANGE获取列表上在给定范围上的所有值lrange key 0 3集合SADD将给定的元素添加到集合sadd key valueSMEMBERS返回集合中所有的元素smembers keySISMEMBER检查给定元素是否存在于集合sismember key valueSREM如果集合中存在该元素则移除该元素srem key value散列HSET在散列里面关联给定的键值对hset key key1 value1HGET获取指定的散列的值hget key key1HGETALL获取散列中包含的所有键值对hgetall keyHDEL如果给定键存在于散列中那么移除这个键hdel key key1有序集合ZADD将一个带有给定分值的成员添加到有序集合中zadd key 123 valueZRANGE从有序集合中获取指定位置范围的数据zrange key 1 3ZRANGEBYSCORE获取有序集合在给定分值范围内的所有元素zrangebyscore key 0 800ZREM如果给定成员存在于有序集合那么移除这个成员zrem key value
3、 Redis命令
这里的命令不再包含上述简单的命令。
3.1 字符串
Redis的字符串是一个由字节组成的序列字符串可以存储三种类型的值字节串、整数【在64位系统上就是64位有符号整数32位系统就是32位有符号整数】、浮点数【取值范围和double相同】。
字符串命令行为描述示例注释INCR将给定键中的值加1incr key1.当用户将一个值存储到Redis的时候如果这个值可以被解释为整数或者浮点数那么Redis允许用户对这个字符串执行各种incr*和decr*操作 2.如果这个值不可以被解释为整数或者浮点数执行自增或者自减操作Redis会返回一个错误 3.如果执行自增或者自减操作的时候键值对不存在或者是值为空串Redis会当做值为0进行处理DECR将给定键中的值减1decr keyINCRBY将给定键中的值加上整数incrby key amountDECRBY将给定键中的值减去整数decrby key amountINCRBYFLOAT将给定键中的值加上浮点数incrbyfloat key amountAPPEND将值value追加到给定键对应的值的末尾append key value 1、在执行setrange或者setbit命令对字符串进行写入的时候如果字符串长度不够那么Redis会自动使用空字节(null)将字符串扩展至所需的长度然后再执行写入或者更新操作 2、在使用getrange读取字符串的时候超过字符串的长度那部分视为空串 3、在使用getbit读取二进制串的时候超过字符串长度为0GETRANGE获取给定键值从偏移量start到end的字串包括start和end在内getrange key start endSETRANGE给定键值从偏移量offset开始的位置到offsetlen(value)的位置被指定的字符串覆盖setrange key offset valueGETBIT返回二进制串指定位置的二进制值getbit key offset 这其实就是位图bitmap。位图是基于字符串类型的一种特殊应用将一个字符串视为一系列的二进制位。SETBIT设置二进制串指定位置的二进制值为value(0或者1)setbit key offset valueBITCOUNT统计二进制串中二进制值为1的数量如果给定了start和end偏移量那么只统计偏移量范围内的二进制位bitcount key [start end]BITTOP对一个或者多个二进制串执行包括并(AND)、或(OR)、异或(XOR)、非(NOT)按位运算操作结果存储到dest-key键中bittop operation dest-key key1 [key2]
3.2 列表
列表命令行为描述示例注释LTRIM对列表进行裁剪只保留[start, end]范围内的元素ltrim key start endBLPOP从第一个非空列表中弹出位于最左端的元素或者阻塞timeout秒并等待可弹出的元素blpop key1 [key2 ...] timeout阻塞弹出和弹出并推入命令最常见的用例就是消息传递和任务队列 BRPOP从第一个非空列表中弹出位于最右端的元素或者阻塞timeout秒并等待可弹出的元素brpop key1 [key2 ...] timeoutRPOPLPUSH从source-key列表中弹出位于最右端的元素然后将这个元素推入到dest-key列表的最左端并给用户返回这个元素rpoplpush source-key dest-keyBRPOPLPUSH从source-key列表中弹出位于最右端的元素然后将这个元素推入到dest-key列表的最左端并给用户返回这个元素如果source-key中没有元素那么会阻塞timeout秒等待可弹出元素的出现brpoplpush source-key dest-key 列表的优点可以包含多个字符串值。
3.3 集合
集合命令行为描述示例SCARD返回集合中元素个数scard keySRANDMEMBER从集合中随机的返回一个或者多个元素。当count为正数的时候命令返回的随机元素不会重复为负数的时候返回的随机元素可能重复srandmember key [count]SPOP从集合中随机的移除一个元素并返回被移除的元素spop keySMOVE如果source-key集合中包含item元素那么从source-key中移除该元素并将该元素添加到集合dest-key集合中smove source-key dest-key item 接下来的命令用于处理和组合多个集合SDIFF返回存在于第一个集合但不存在于其他集合中的元素【差集】sdiff key1 [key2 ...]SDIFFSTORE将存在于第一个集合但不存在于其他集合中的元素【差集】存储到dest-key键里面sdiffstore dest-key key1 [key2 ...]SINTER返回同时存在于所有集合的元素【交集】sinter key1 [key2 ...]SINTERSTORE将同时存在于所有集合的元素【交集】存储到dest-key键里面sinterstore dest-key key1 [key2 ...]SUNION返回所有集合的元素【并集】sunion key1 [key2 ...]SUNIONSTORE将同时存在于所有集合的元素【交集】存储到dest-key键里面sunionstore dest-key key1 [key2 ...]
3.4 散列
散列命令行为描述示例注释HMGET返回散列中一个或者多个键的值hmget key hashkey1 [hashkey2 ..]HMSET为散列设置一个或者多个键值对hmset key hashkey1 value1 [hashkey2 value2 ..]HDEL删除散列中一个或者多个键值对返回成功删除键值对的个数hdel key hashkey1 [hashkey2 ...]HLEN返回散列中包含的键值对个数hlen keyHEXISTS返回给定的键是否存在于散列中hexists key hashkeyHKEYS获取散列中包含的所有键hkeys key尽管有hgetall了但是hkeys和hvals仍然存在的必要。如果散列包含的值很大那么用户可以先使用hkeys获取散列包含的所有键然后分多次获取hget/hmget一个或者多个键值对避免因为一次获取多个大体积的导致服务端阻塞 HVALS获取散列中包含的所有值hvals keyHGETALL获取散列中包含的所有键值对hgetall keyHINCRBY将键hashkey存储的值增加整数incrementhincrby key hashkey incrementHINCRBYFLOAT将键hashkey存储的值增加浮点数incrementhincrbyfloat key hashkey increment
3.5 有序集合
有序集合命令行为描述示例注释ZADD将带有分值的成员添加到有序集合里面zadd key score member [score member ..]ZREM从有序集合中删除给定的成员返回被删除的成员数量zrem key member [member ..]ZCARD返回有序集合中成员数量zcard keyZINCRBY给member成员的分值上加上incrementzincrby key increment memberZCOUNT返回分值介于[min, max]之间的成员数量zcount key min maxZRANK返回成员member在有序集合中的排名zrank key memberZSCORE返回成员member的分值zscore key memberZRANGE返回有序集合中排名介于[start, stop] 之间的成员如果带有withscores参数那么命令会将成员的分值一并返回zrange key start stop [withscores]ZREVRANK返回成员member在有序集合中的【逆序分值按照从大到小排序】排名zrevrank key memberZREVRANGE按照逆序【分值按照从大到小排序】返回有序集合中排名介于[start, stop] 之间的成员如果带有withscores参数那么命令会将成员的分值一并返回zrevrange key start stop [withscores]ZRANGEBYSCORE返回有序集合中分值介于[min,max]之间的成员zrangebyscore key min max [withscores]ZREVRANGEBYSCORE按照分数值从大到小的顺序返回有序集合中分值介于[min,max]之间的成员zrevrangebyscore key min max [withscores]ZREMRANGEBYRANK删除有序集合中排名介于[min,max]之间的成员zremrangebyrank key min maxZREMRANGEBYSCORE删除有序集合中分值介于[min,max]之间的成员zremrangebyscore key min maxZINTERSTORE用于计算多个有序集合的交集并将结果存储在新的有序集合中zinterstore dest-key numsourcekeys source-key1 source-key2 [WEIGHTS weight [weight ...]] [AGGREGATE sum|min|max]对集合求并集或者交集不只是有序集合对集合也可以。甚至有序集合和集合一起也可。这里的source-key可以是集合如果是集合的话集合中的元素分值默认为1ZUNIONSTORE计算给定的一个或多个有序集的并集其中给定 key 的数量必须以 numkeys 参数指定并将该并集(结果集)储存到 destinationzunionstore dest-key numsourcekeys source-key1 source-key2 [WEIGHTS weight [weight ...]] [AGGREGATE sum|min|max]
3.6 发布与订阅
发布与订阅命令行为描述示例注释SUBSCRIBE订阅一或多个频道subscribe channel [channel]发送者往频道发送二进制消息每当消息发送到频道时订阅者都会收到消息UNSUBSCRIBE退订一或多个频道如果没有给定频道那么退订所有频道unsubscribe [channel [channel]]PUBLISH给指定频道发消息publish channel messagePSUBSCRIBE订阅与给定模式相匹配的所有频道psubscribe pattern [pattern]PUNSUBSCRIBE退订给定模式的频道如果没有给定模式那么退订所有频道punsubscribe [pattern [pattern]]
虽然redis提供了发布和订阅功能但是一般不建议使用原因
redis的稳定性问题。如果订阅者读取消息的速度不够快的话消息的不断积压会导致输出缓冲区越来越大这可能会导致Redis 的速度变慢甚至直接崩溃。也可能会导致Redis 被操作系统强制杀死甚至导致操作系统本身不可用。新版的Redis 不会出现这种问题因为它会自动断开不符合 client-output-buffer-limitpubsub配置选项要求的订阅客户端。和数据传输的可靠性有关。任何网络系统在执行操作时都可能会遇上断线情况 而断线产生的连接错误通常会使得网络连接两端中的其中一端进行重新连接。 如果客户端在执行订阅操作的过程中断线那么客户端将丢失在断线期间发送的所有消息。
3.7 其他命令
3.7.1 排序
排序命令行为描述示例注释SORT对列表、集合以及有序集合进行排序sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern …]] [ASC|DESC] [ALPHA] [STORE destination] BY pattern可以指定存储到其他key中的值作为比较条件。 参考文献[Redis的排序命令Sort](https://blog.csdn.net/Tc_lccc/article/details/137624709)
3.7.2 过期时间
过期时间命令行为描述示例PERSIST移除键的过期时间persist keyTTL查看键距离过期还有多少秒ttl keyEXPIRE让给定的键在指定秒数后过期expire key secondsEXPIREAT将键的过期时间设置为给定的unix的时间戳expireat key timestampPTTL查看键距离过期还有多少毫秒pttl keyEXPIRE让给定的键在指定毫秒数后过期expire key secondsEXPIREAT将键的过期时间设置为给定的unix的时间戳【毫秒精度】expireat key timestamp