保定做网站多钱,成都网站建设好的公司,网页制作难吗,wordpress 悬停遮罩引言
Redis是一个内存数据库#xff0c;在学习它的内部原理与实现之前#xff0c;我们首先要做到的就是学会使用#xff0c;学会其丰富的命令操作。
一、字符串
Redis的字符串类型之前笔者的一篇入门介绍中曾经说过#xff0c;不是简单的只存人可以阅读的字符串#xf…引言
Redis是一个内存数据库在学习它的内部原理与实现之前我们首先要做到的就是学会使用学会其丰富的命令操作。
一、字符串
Redis的字符串类型之前笔者的一篇入门介绍中曾经说过不是简单的只存人可以阅读的字符串实际可以是任意二进制的字节序列。在Redis中字符串可以存储以下3中类型值
字节串byte string整数浮点数
虽然我们以字符的形式把数值类型的整数或浮点数存到redis中但我们仍然可以对这些以字符形式存储的整数或浮点数进行自增increment或自减decrement操作必要时Redis还会把整数转换为浮点数。 整数的取值范围和系统的长整数取值范围相同32位系统就是32位有符号整数64位系统就是64位有符号整数。
Redis中的自增和自减命令
命令描述incrincr key-name ——把键存储的值加1decrdecr key-name ——把键存储的值减1incrbyincrby key-name amount 把键存储的值加上整数amountdecrbydecrby key-name amount 把键存储的值减去整数amountincrbyfloatincrbyfloatkey-name amount 把键存储的值加上浮点数amount
测试代码如下笔者使用的是Jedis库
public class RedisTest {public static void main(String[] args) {try (JedisPool jedisPool new JedisPool(new JedisPoolConfig(), localhost, 6379)){Jedis jedis jedisPool.getResource();jedis.incr(key-name);System.out.println(把键存储的值加1: jedis.get(key-name));jedis.decr(key-name);System.out.println(把键存储的值减1: jedis.get(key-name));jedis.incrBy(key-name, 10);System.out.println(把键存储的值加10: jedis.get(key-name));jedis.decrBy(key-name, 5);System.out.println(把键存储的值减5: jedis.get(key-name));jedis.incrByFloat(key-name, 0.1);System.out.println(把键存储的值加0.1: jedis.get(key-name));}}
} 注意点如果Redis对于一个已经存在的键值进行incr、decr、incrBy、decrBy操作则要求该键对应的值必须是整数否则报错 比如上面的代码再执行一次对5.1进行自增操作报错如下 对于代码 jedis.incrByFloat(key-name, 0.1);System.out.println(把键存储的值加0.1: jedis.get(key-name));5.1加上0.1会遇到精度问题并不是5.2 而是5.199999999999所以对于非整数类型的数值解决方法是先从redis获取值再使用java的BigDecimal对其进行处理再写入redis代码大致如下
Redis强大到提供了字符串子串和二进制位的操作命令。这是一般的键值对数据库所没有的命令如下
命令用例和描述APPEND如果 key 已经存在并且是一个字符串 APPEND 命令将给定的 value 追加到 key 原来的值的末尾GETRANGE如果 key 已经存在并且是一个字符串 APPEND 命令将给定的 value 追加到 key 原来的值的末尾SETRANGE重写 key 中字符串值的一部分从 offset 开始用新的字符串替换GETBIT返回 key 中指定偏移量 offset 上的位(bit)。偏移量 0 是第一位SETBIT设置或清除 key 中指定偏移量 offset 上的位(bit)并返回修改前的 bit 值BITCOUNT对一个 bit 字符串进行计数在指定范围内计算为 1 的 bit 的数量BITOP对两个或更多的 bit 字符串进行位操作AND, OR, XOR, NOT并将结果保存到 destination key
这些命令笔者这里就不详细演示了不怎么常用感兴趣可以自行尝试 二、列表
列表是Redis早期就实现的数据结构从开始的普通双向链表到后来的快速列表实现Redis在内存和性能的平衡上花了不少功夫。下面是一些常用的列表命令
命令描述RPUSHRPUSH key-name value [value …]——将一个或多个值推入列表的右端LPUSHLPUSH key-name value [value …]——将一个或多个值推入列表左端RPOPRPOP key-name——移除并返回列表最右端的元素LPOPLPOP key-name——移除并返回列表最左端的元素LINDEXLINDEX key-name offset——返回列表中偏移量位offset的元素LRANGELRANGE key-name start end——返回列表从start偏移量到end偏移量范围LTRIMLTRIM key-name start end ——对列表进行修剪只保留从start偏移量到end偏移量范围内的元素其中包含stdart和end处的元素
笔者也是使用Jedis简单操作了下也可以使用工具连redis server使用redis相关命令操作。 没问题的哈
阻塞式的列表弹出命令以及在列表间移动元素的命令
命令用例描述BLPOPBLPOP key-name [key-name …] timeout ——从第一个非空列表中弹出位于最左端的元素或者在timeout秒内阻塞等待可弹出的元素出现BRPOPBRPOP key-name [key-name …] timeout ——从第一个非空列表中弹出位于最右端的元素或者在timeout秒内阻塞等待可弹出的元素出现RPOPLPUSHRPOPLPUSH source-key dest-key——从source-key列表中弹出位于最右端的元素然后将这个元素推入dest-key列表的最左端并向用户返回这个元素BRPOPLPUSHBRPOPLPUSH source-key dest-key timeout——从source-key列表中弹出位于最右端的元素然后将这个元素推入dest-key列表的最左端并向用户返回这个元素如果source-key为空则阻塞等待timeout秒
这些命令现在看起来好像有用但不知道哪里适合用不用管后续介绍队列时会经常用到这些命令。
三、散列
散列相当于HashMap可以让用户把多个键值对存储到一个Redis键里。Redis的散列值提供了一些与字符串值相同的特性使得散列非常适合把一些相关的数据存储在一起。可以把这个数据聚集看成是关系数据库里的行或者文档数据库的文档。
常用的散列命令如下:
命令描述HMGETHMGET key-name key [key …]——从散列中获取一个或多个键的值HMSETHMSET key-name key value [key value …]——为散列里面的一个或多个键设置值HDELHDEL key-name key [key …]——删除散列里面的一个或多个键值对返回成功找到并删除的键值对数量HLENHLEN key-name——返回散列包含的键值对数量
Redis散列的高级命令如下
命令描述HEXISTSHEXISTS key-name key——检查给定键是否存在于散列中HKEYSHKEYS key-name——获取散列包含的所有键HVALSHVALS key-name——获取散列包含的所有值HGETALLHGETALL key-name——获取散列包含的所有键值对HINCRBYHINCRBY key-name key increment——将key存储的值加上整数incrementHINCRBYFLOATHINCRBYFLOAT key-name key increment——将key存储的值加上浮点数increment
对于以上的命令我们需要注意的是HKEYS 和HVALS 的用处尽管HGETALL可以获取所有键值信息但是当散列包含的值非常大时HKEYS就派上了用场可以先使用HKEYS获取所有键再使用HMGET一个个去除键的值避免一次获取多个大体积的值造成服务器阻塞。
四、集合
集合和列表优点类似但是集合只能保存各不相同的元素。集合以无序的方式存储多个各不相同的元素。
下面是一些常用的集合命令
命令描述SADDSADD key-name item [item…]——把一个或多个元素添加到集合里并返回被添加元素中原本不存在于集合中的元素数量SREMSREM key-name item [item…]——从集合里面移除一个或多个元素并返回被移除元素的数量SMEMBERSSMEMBERS key-name——返回集合包含的所有元素SISMEMBERSISMEMBER key-name item——检查元素item是否存在于集合key-name里SCARDSCARD key-name——返回集合包含的所有元素SRANDMEMBERSRANDMEMBER key-name [count]——从集合中返回一个或多个元素。当count为正数时命令返回的随机元素可能会重复SPOPSPOP key-name——随机地移除集合中的一个元素并返回被移除的元素SMOVESMOVE source-key dest-key item——如果集合source-key包含item那么从source-key中移除item并将元素item移动到dest-key中如果item移除成功那么命令返回1否则返回0
同样的这些命令笔者也不再演示感兴趣的可以使用Jedis尝试下或者直接使用redis原生命令操作。
用于组合和处理多个集合的Redis命令
命令描述SDIFFSDIFF key-name [key-name…]——返回哪些存在于第一个集合、但不存在于其他集合中的元素数学上的差集运算SDIFFSTORESDIFFSTORE dest-key key-name [key-name…]——把那些存在于第一个集合但并不存在于其他集合中的元素数学上的差集运算存储到dest-key键里面SINTERSINTER key-name [key-name…]——返回那些同时存在所有集合中的元素相当于数学的交集SINTERSTORESINTERSTORE dest-key key-name [key-name…]——把那些同时存在所有集合中的元素存储到dest-key键中SUNIONSUNION key-name [key-name…]——返回那些至少存在于一个集合中的元素数学里的并集SUNIONSTORESUNIONSTORE dest-key key-name [key-name…]——把并集元素存储到dest-key键中
五、有序集合
虽然叫有序集合但是数据结构和集合反而不同却是和散列类似它存储着成员与分值之间的映射提供了许多针对这个分值的处理命令比如排序。这个score分值的作用就是排序。
常用的有序集合的命令如下
命令描述ZADDZADD key-name score member [score member…]——把带有给定分值的成员添加到有序集合中去ZREMZREM key-name member [member…]——从有序集合中移除给定成员返回移除成功的成员数量ZCARDZCARD key-name——返回有序集合包含的成员数量ZINCRBYZINCRBY key-name increment member——把member成员的分值加上incrementZCOUNTZCOUNT key-name min max——返回分值介于min和max之间的成员数量ZRANKZRANK key-name member——返回成员member在有序集合中的排名注意排名是从0开始的ZSCOREZSCORE key-name member——返回成员member的分值ZRANGEZRANGE key-name start stop [WITHSCORES]——返回有序集合中排名介于start和stop之间的成员如果给定了可选的WITHSCORES选项那么命令会将成员的分值也一并返回
自行在Redis中测试如下命令
ZADD zset-key 3 a 2 b 1 cZCARD zset-keyZINCRBY zset-key 3 cZSCORE zset-key cZRANK zset-key cZRANGE zset-key 0 -1 withscores高阶有序集合命令
命令描述ZREVERANKZREVERANK key-name member——返回有序集合里成员member的排名成员按照分数从大到小排列ZREVERANGEZREVERANGE key-name start stop [withscores]——返回有序集合给定排名范围内的成员成员按照分值从大到小排序ZRANGEBYSCOREZRANGEBYSCORE key min max [withscores] [limit offset count]——返回有序集合中分值介于min和max之间的所有成员ZREVERANGEBYSCOREZREVERANGEBYSCOREkey min max [withscores] [limit offset count]——获取有序集合中分值介于min和max之间的所有成员并按照分值从大到小的顺序来返回它们ZREMRANGEBYRANKZREMRANGEBYRANK key-name start stop——移除有序集合中排名介于start和stop之间的所有成员ZREMRANGEBYSCOREZREMRANGEBYSCORE key-name min max——移除有序集合中分值介于min和max之间的所有成员ZINTERSTOREZINTERSTORE dest-key key-count key [key…] [weights weight [weight…]] [AGGREGATE SUM|MIN|MAX]——对给定集合执行类似于集合的交集运算ZUNIONSCOREZUNIONSCORE dest-key key-count key [key…] [weights weight [weight…]] [AGGREGATE SUM|MIN|MAX]——对给定的有序集合执行类似于集合的交集运算
交集运算使用的是默认的聚集函数sum输出的有序集合为交集成员的各自的分值累加。
并集运算是取每个并集成员最小分值的成员输出到有序集合中。