CentOS Redis数据类型

Redis数据类型通用操作## 判断key是否存在127.0.0.1:6379> EXISTS name(integer) 1127.0.0.1:6379> EXISTS name1(integer) 0## 修改key名字127.0.0.1:6379> RENAME name name1OK## 查看指定key的数据类型127.0.0.1:6379> TYPE name1string## 删除key127.0.0.1:6379> del name1(integer) 1## 查看一个key的生存时间127.0.0.1:6379[15]> ttl age(integer) -1## 以秒为单位设置生存时间127.0.0.1:6379[15]> ttl age(integer) 95## 以毫秒为单位设置生存时间127.0.0.1:6379[15]> PEXPIRE age 4000## 取消生存时间127.0.0.1:6379[15]> PERSIST age字符串类型操作(strings)增## 设置key127.0.0.1:6379> set name www## 设置多个key127.0.0.1:6379> MSET name www name1 wsh name2 qwe## 查看多个key值127.0.0.1:6379> MGET name name1 name21) "www"2) "wsh"3) "qwe"## 先获取一个key的值,再设置或者修改key值127.0.0.1:6379> getset xxx 123(nil)127.0.0.1:6379> get xxx"123"## 设置key同时设置生存时间(秒为单位)127.0.0.1:6379> set book hongloumeng ex 100OK## 设置key同时设置生存时间(毫秒为单位)127.0.0.1:6379> set book hongloumeng px 100OK## 字符串自增127.0.0.1:6379> incr zan(integer) 1## 指定增加数量127.0.0.1:6379> incrby fans 10000(integer) 10023## 自减127.0.0.1:6379> decr fans(integer) 10012## 执行自减数量127.0.0.1:6379> decrby fans 1000(integer) 9012## 按照小数自增127.0.0.1:6379> incrbyfloat zls 0.1"1.4"删127.0.0.1:6379> del rty(integer) 1改## 字符串追加127.0.0.1:6379> APPEND name hhh(integer) 6127.0.0.1:6379> get name"wwwhhh"## 修改第N个字符127.0.0.1:6379> SETRANGE name 5 L127.0.0.1:6379> get name"wwwhhL"查## 查看一个key127.0.0.1:6379> get name1"wsh"## 查看多个key127.0.0.1:6379> MGET name name1 name21) "wwwhhL"2) "wsh"3) "qwe"## 查看字符串的长度127.0.0.1:6379> STRLEN name(integer) 6127.0.0.1:6379> STRLEN name1(integer) 3## 查看生存时间127.0.0.1:6379> ttl name1 // 秒(integer) 93127.0.0.1:6379> pttl name1 // 毫秒(integer) 91417# 字符串截取127.0.0.1:6379> GETRANGE name 0 3"wwwh"hash类型(字典类型)

应用场景:

存储部分变更的数据,如用户信息,商品信息等。最接近表结构的一种类型。

# 创建keyhset keyname field valuehset student_id_1 name zlshset student_id_1 name zls age 18 gender mhmset student_id_1 name zls age 18 gender m# 查询hget keyname fieldhget student_id_1 namehgetall keynamehgetall student_id_1hmget student_id_1 name age# 删除127.0.0.1:6379> hdel student_id_1 age gender(integer) 2127.0.0.1:6379> hgetall student_id_1127.0.0.1:6379> del student_id_1# 改127.0.0.1:6379> hset student_id_1 name zls age 18 gender m(integer) 3127.0.0.1:6379> hgetall student_id_1 1) "fans" 2) "8" 3) "zan" 4) "9" 5) "name" 6) "zls" 7) "age" 8) "18" 9) "gender"10) "m"list类型(列表类型)

消息队列

在生活中,其实有很多的例子,都类似消息队列。

比如:工厂生产出来的面包,交给超市,商场来出售,客户通过超市,商场来买面包,客户不会针对某一个工厂去选择,只管从超市买出来,工厂也不会管是哪一个客户买了面包,只管生产出来之后,交给超市,商场来处理。

消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息生产者只管把消息发布到MQ中而不管谁来取,消息消费者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在。

生产者 -> 消息队列 -> 消费者 kafka

为什么使用消息队列

首先,我们可以知道,消息队列是一种异步的工作机制,比如说日志收集系统,为了避免数据在传输过程中丢失,还有订单系统,下单后,会生成对应的单据,库存的扣减,消费信息的发送,一个下单,产生这么多的消息,都是通过一个操作的触发,然后将其他的消息放入消息队列中,依次产生。再就是很多网站的,秒杀活动之类的,前多少名用户会便宜,都是通过消息队列来实现的。

这些例子,都是通过消息队列,来实现,业务的解耦,最终数据的一致性,广播,错峰流控等等,从而完成业务的逻辑。

消息队列的产品

RabbitMQ(最早金融公司,OpenStack)ZeroMQ(SaltStack)RocketMQKafka(Java)Redis(消息队列)kafka在kafka中可以创建topic会话topic会话组,可以重复消费,消费者取数据根据topic的偏移量来取公司的OA系统使用Jira公司的文档系统使用 confluence127.0.0.1:6379> lpush access_log ‘10.0.0.1 – – [03/Sep/2022:03:38:41 +0800] "POST /index.php HTTP/1.1" 200 1500 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" "-"’127.0.0.1:6379> lpush access_log ‘10.0.0.1 – – [03/Sep/2022:03:54:09 +0800] "POST /index.php HTTP/1.1" 200 1500 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" "-"’# 将数据添加在可以的最右边127.0.0.1:6379> rpush name1 hl(integer) 1127.0.0.1:6379> rpush name1 wyk(integer) 2127.0.0.1:6379> rpush name1 zls(integer) 3# 如果数据不存在则不创建lpushx name2 hl# 将数据插入到key的任意位置127.0.0.1:6379> linsert name2 after hl hjxafter:在…之后before:在…之前# 查看key中的指定范围数据127.0.0.1:6379> lrange name 0 2(empty array)127.0.0.1:6379> lrange name1 0 21) "hl"2) "wyk"3) "zls"# 从key的最左边取出数据127.0.0.1:6379> lpop name1"hl"127.0.0.1:6379> lpop name1"wyk"127.0.0.1:6379> lpop name1"zls"# 查看key的长度127.0.0.1:6379> llen name1lpush:左边写入rpush:右边写入lpop:左边取出rpop:右边取出# 将name1右边的数据取出,写入name2左边127.0.0.1:6379> lrange name1 0 21) "wyk"2) "hjx"3) "xwq"127.0.0.1:6379> lrange name2 0 21) "hl"2) "hjx"3) "zls"127.0.0.1:6379> rpoplpush name1 name2"xwq"127.0.0.1:6379> lrange name2 0 21) "xwq"2) "hl"3) "hjx"127.0.0.1:6379> lrange name2 0 31) "xwq"2) "hl"3) "hjx"4) "zls"## 删除# 从左边开始删除指定个数元素 lrem127.0.0.1:6379> lrange name2 0 100 1) "hl" 2) "hl" 3) "hl" 4) "hl" 5) "hl" 6) "hl" 7) "xwq" 8) "hl" 9) "hjx"10) "zls"11) "hl"12) "hl"13) "hl"14) "hl"127.0.0.1:6379> lrem name2 7 hl(integer) 7127.0.0.1:6379> lrange name2 0 1001) "xwq"2) "hjx"3) "zls"4) "hl"5) "hl"6) "hl"7) "hl"# 保留指定下标的元素,其余的都删除127.0.0.1:6379> lrange name2 0 1001) "xwq"2) "hjx"3) "zls"4) "hl"5) "hl"6) "hl"7) "hl"127.0.0.1:6379> ltrim name2 0 1OK127.0.0.1:6379> lrange name2 0 1001) "xwq"2) "hjx"## 改127.0.0.1:6379> lrange name1 0 1001) "wyk"2) "hjx"127.0.0.1:6379> lset name1 0 xwqOK127.0.0.1:6379> lrange name1 0 1001) "xwq"2) "hjx"## 查# 按照索引查询127.0.0.1:6379> lindex name1 1"hjx"127.0.0.1:6379> lindex name1 0"xwq"127.0.0.1:6379> lindex name1 2(nil)127.0.0.1:6379> lindex name1 -1 //最后一个元素"hjx"## 发朋友圈127.0.0.1:6379> lpush wechat ‘monday hl sb'(integer) 1127.0.0.1:6379> lpush wechat ‘tiusiday hl yiran sb'(integer) 2127.0.0.1:6379> lpush wechat ‘wensiday hl always sb'(integer) 3## 查看朋友圈127.0.0.1:6379> lrange wechat 0 -11) "wensiday hl always sb"2) "tiusiday hl yiran sb"3) "monday hl sb"set(集合类型)组1:1 2 3 4 5组2: 1 3 5 7 9交集:1 3 5并集:1 2 3 4 5 7 9差集:2 4 7 9# 创建集合127.0.0.1:6379> sadd zls_fans wyk hl(integer) 2127.0.0.1:6379> sadd tly_fans mls gaofei wyk(integer) 3# 查## 查询集合中的元素,有就返回1 没有就返回0127.0.0.1:6379> sismember zls_fans hl(integer) 1127.0.0.1:6379> sismember zls_fans cls(integer) 0## 查询集合中的所有元素127.0.0.1:6379> SMEMBERS zls_fans1) "hl"2) "wyk"## 查询集合中元素数量127.0.0.1:6379> scard zls_fans(integer) 2127.0.0.1:6379> scard tly_fans(integer) 3## 比较集合中的差异,取前面集合的不同之处127.0.0.1:6379> sdiff hl_fans tly_fans zls_fans1) "xiaoxuesheng"127.0.0.1:6379> SMEMBERS hl_fans1) "hl"2) "mls"3) "xiaoxuesheng"127.0.0.1:6379> SMEMBERS tly_fans1) "wyk"2) "mls"3) "gaofei"127.0.0.1:6379> SMEMBERS zls_fans1) "hl"2) "wyk"127.0.0.1:6379> sdiff hl_fans tly_fans1) "hl"2) "xiaoxuesheng"127.0.0.1:6379> sdiff tly_fans hl_fans 1) "wyk"2) "gaofei"127.0.0.1:6379> sdiff tly_fans hl_fans zls_fans1) "gaofei"## 比较之后的差异,存放到新的集合中127.0.0.1:6379> sdiffstore resault tly_fans hl_fans (integer) 2127.0.0.1:6379> KEYS *1) "hl_fans"2) "resault"3) "name2"4) "tly_fans"5) "name1"6) "wechat"7) "zls_fans"127.0.0.1:6379> type resaultset127.0.0.1:6379> scard resault(integer) 2127.0.0.1:6379> 127.0.0.1:6379> SMEMBERS resault1) "wyk"2) "gaofei"## 交集(共同好友)127.0.0.1:6379> SMEMBERS hl_fans1) "hl"2) "mls"3) "xiaoxuesheng"127.0.0.1:6379> SMEMBERS zls_fans1) "hl"2) "wyk"127.0.0.1:6379> sinter hl_fans zls_fans1) "hl"## 并集127.0.0.1:6379> sunion hl_fans zls_fans1) "hl"2) "wyk"3) "mls"4) "xiaoxuesheng"## 将交集存入新集合127.0.0.1:6379> sinterstore new_set hl_fans zls_fans(integer) 1127.0.0.1:6379> SMEMBERS new_set1) "hl"## 将并集存入新集合127.0.0.1:6379> sunionstore new_set2 hl_fans zls_fans(integer) 4127.0.0.1:6379> SMEMBERS new_set21) "hl"2) "wyk"3) "mls"4) "xiaoxuesheng"## 取随机值127.0.0.1:6379> srandmember zls_fans"mls"## 改## 将集合的元素存入另一个集合 SMOVE127.0.0.1:6379> SMEMBERS hl_fans1) "hl"2) "mls"3) "xiaoxuesheng"127.0.0.1:6379> SMEMBERS zls_fans1) "hl"2) "wyk"127.0.0.1:6379> SMOVE hl_fans zls_fans mls(integer) 1127.0.0.1:6379> SMEMBERS hl_fans1) "hl"2) "xiaoxuesheng"127.0.0.1:6379> SMEMBERS zls_fans1) "hl"2) "wyk"3) "mls"## 删127.0.0.1:6379> spop hl_fans"hl"127.0.0.1:6379> SMEMBERS hl_fans1) "xiaoxuesheng"## 删除指定元素,返回删除元素的个数127.0.0.1:6379> srem zls_fans hl(integer) 1127.0.0.1:6379> SMEMBERS zls_fans1) "wyk"2) "mls"127.0.0.1:6379> srem zls_fans xxx(integer) 0#### 无序的127.0.0.1:6379> sadd zls_fans 111 222 333 444 555 666(integer) 6127.0.0.1:6379> SMEMBERS zls_fans 1) "abc" 2) "111" 3) "mls" 4) "123" 5) "def" 6) "333" 7) "222" 8) "456" 9) "444"10) "555"11) "666"12) "wyk"sorted-set(有序集合)

应用场景:

排行榜应用,取TOP N操作这个需求与上面需求的不同之处在于,前面操作以时间为权重,这个是以某个条件为权重,比如按顶的次数排序,这时候就需要我们的sorted set出马了,将你要排序的值设置成sorted set的score,将具体的数据设置成相应的value,每次只需要执行一条ZADD命令即可。

# 增127.0.0.1:6379> zadd myzset 1 "one" 2 "two" 3 "three"# 查## 只查询成员127.0.0.1:6379> zrange chengji 0 -11) "wyk"2) "hl"3) "zls"## 查询成员和分数127.0.0.1:6379> zrange chengji 0 -1 WITHSCORES1) "wyk"2) "1"3) "hl"4) "38"5) "zls"6) "100"## 查询成员的索引127.0.0.1:6379> zrank chengji wyk(integer) 0127.0.0.1:6379> zrank chengji zls(integer) 2## 查询成员数量127.0.0.1:6379> zcard chengji (integer) 3## 查看分数是指定范围的成员个数 30 <= score <=40127.0.0.1:6379> zcount chengji 30 40(integer) 1127.0.0.1:6379> zcount chengji 30 101(integer) 2## 获取指定成员分数127.0.0.1:6379> ZSCORE chengji wyk"1"127.0.0.1:6379> ZSCORE chengji zls"100"## 查看分数是指定范围的成员名127.0.0.1:6379> zcount chengji 30 40(integer) 1127.0.0.1:6379> zrangebyscore chengji 30 401) "hl"## +inf表示最后一个成员,-inf表示第一个成员,意思是:检索所有数据,然后从下标为2的数据开始再往后输出3:(N-1)个数据127.0.0.1:6379> zrangebyscore chengji -inf +inf limit 2 31) "hjx"2) "xwq"3) "zls"127.0.0.1:6379> zrangebyscore chengji -inf +inf limit 2 21) "hjx"2) "xwq"127.0.0.1:6379> zrangebyscore chengji -inf +inf limit 2 11) "hjx"127.0.0.1:6379> zrangebyscore chengji -inf +inf limit 2 41) "hjx"2) "xwq"3) "zls"# 删## 删除指定分数范围的成员,并返回删除的个数127.0.0.1:6379> zrangebyscore chengji 30 401) "hl"127.0.0.1:6379> zremrangebyscore chengji 30 40(integer) 1## 按指定索引范围删除,返回删除个数127.0.0.1:6379> zremrangebyrank chengji 0 2(integer) 3## 倒序排名127.0.0.1:6379> zrevrange chengji 0 -1 WITHSCORES 1) "zls" 2) "100" 3) "hjx" 4) "60" 5) "xwq" 6) "50" 7) "hl" 8) "38" 9) "wyk"10) "1"## 按照分数段查找成员,并倒序排序127.0.0.1:6379> zrevrangebyscore chengji 101 30 WITHSCORES1) "zls"2) "100"3) "hjx"4) "60"5) "xwq"6) "50"7) "hl"8) "38"## 按照分数查找成员,并倒序排序,然后按照索引号,取出指定的数据127.0.0.1:6379> zrevrangebyscore chengji 101 30 WITHSCORES limit 1 21) "hjx"2) "60"3) "xwq"4) "50"127.0.0.1:6379> zrevrangebyscore chengji 101 30 WITHSCORES limit 1 31) "hjx"2) "60"3) "xwq"4) "50"5) "hl"6) "38" 【文章转自日本多IP服务器 japzq.html提供,感恩】要做一个积极勇敢乐观的追梦人,永远不说消极的话,

CentOS Redis数据类型

相关文章:

你感兴趣的文章:

标签云: