redis-redis指令详解(其一)

前言:

前面文章分享了mysql的c++封装,原计划是再做一个oracle的封装。后来在学习过程中发现oracle和mysql有较多重叠的内容,且同属于sql数据库,实际在工作中的使用频率也远不如mysql高,因此决定先暂缓oracle的学习,改为学习一个nosql数据库,查看各大互联网公司的招聘需求,就选择了redis进行学习。本文将详细记录redis语句、注意事项以及redis学习心得。 文中有问题的地方欢迎大家指出,共同学习探讨,把好的正确的东西分享给更多人。😊

redis指令详解:

string
说明
该类型为redis提供的字符串类型操作,由1个key值对应1个value值,value可以为任意数据,但在redis存储时,都以字符串形式保存。
注意事项
1)操作成功返回1,操作失败返回0.部分指令返回的代表结果值
2)数据为获取到返回nil
3)数据最大存储量512MB
4)数字最大为9223372036854775807
5)key的格式通常为:“表名:主键名:主键值:字段名”,来对应数据库中的数据
命令
1、set key value 插入/修改数据
2、get key value 获取数据
组合发送获取(优势在于减少了发送和接收的时间)
3、mset key value key value…批量插入
4、mget key key key … 批量获取
5、strlen key 获取该键值下的数据长度
6、append key value 在该key对应数据的基础上添加value。如果先set name test,再执行 append name 123,此时get name返回的为test123
7、incr key 若key对应的值为数字,则自增+1
8、decr key 若key对应的值为数字,则自减-1
9、setex key seconds value set数据并设置生命周期为seconds秒,超过该时间后get该key对应的value,将为空(重复调用该函数给同一个key,时间将重新计时)
10、psetex key milliseconds value set数据并设置生命周期为milliseconds豪秒,超过该时间后get该key对应的value,将为空
string数字操作
9、incrby key increment 若key对应的值为数字,则增加increment(key对应的value若为小数则会操作失败)
10、incrby key increment 若key对应的值为数字,则减小increment(key对应的value若为小数则会操作失败)
11、incrbyfloat key increment 若key对应的值为数字,则增加increment(increment必须为小数)
12、incrbyfloat key increment 若key对应的值为数字,则减小increment(increment必须为小数)


hash
说明
hash为redis提供的类似于map的存储结构,一个hash应包含1个key,若干个field,对应field的value。该类型的引入是为解决如json等格式数据存入string类型时只能进行整体读写操作的问题,因此该类型支持仅对hash中的某个field下的value进行读取或写入。
注意事项
1、hash下的value只能放字符串,不能放其他类型
2、hash的key有上限,为2的32次方-1
3、hash不要滥用,不要把hash当做专业存对象的类型,会影响效率
4、hgetall可获取全部field和value,但当field过多时,遍历效率会很低。无大量获取需求时,建议使用hget或hmget
命令
1、hset key field value 添加/修改数据
2、hmset key field value field value …(批量添加/修改数据,field已存在就修改数据,不存在就添加数据)
2、hget key field 获取数据
3、hgetall key 获取全部数据(返回值包含域名)
4、hmget key field1 field2 批量获取数据(返回值不包含域名)
5、hdel key fied1 [field2] 删除数据
6、hlen key 获取key里面field的个数
7、hexists key field 检查当前key中是否存在该field(存在返回1,不存在返回0)
8、del key(删除整个hash)
hash扩展操作:
1、hkeys key (获取当前key里面的所有field)
2、hvals key (获取当前key里面的所有value,若不同字段的value值相同,则会重复显示出来)
3、hincrby key field increment (对该field进行自增加increment的操作)
4、hincrbyfloat key field increment (对该field进行自增加increment的操作,increment为float型)
5、hsetnx field value (添加数据,如果无该值就set进去,如果有值了就返回失败)


list
说明:

1、list用来存储多个数据,底层实现为双向链表。关注数据的存入顺序。
2、使用场景如:微博热搜实时更新、多系统的日志统计(多系统日志统一到redis的list形成有先后顺序的一份日志)
注意事项:
1、默认list的左边是头,右边为尾
2、list保存的数据类型为string
3、list的最大尺寸为2的32次方减1
4、list具有索引概念,但最主要的操作为栈和队列的形式
5、获取全部数据操作结束索引可以为负数,意为从start检索到倒数第几个元素
命令:
1、lpush key value1 [value2] …(从左插入数据)
2、rpush key value1 [value2] … (从右插入数据)
3、lrange key start stop (从左获取索引从start到stop的数据)
注:当不知道list大小时,可通过start写0,stop写-1查询全部数据;stop -1意为从0索引遍历到最后一个元素;若stop传-2,意为遍历到倒数第二个元素。
4、lindex key index (获取索引为index的值)
5、llen key (获取链表长度)
6、lpop key(获取使用lpush最后插入的元素,同时从list删除)
7、rpop key(获取使用lpush最先插入的元素,同时从list删除)
8、del key(删除整个list)
扩展操作:
1、blpop key1 key2 timeout (阻塞版本lpop)
注:当key有数据时,直接获取数据;当key没有数据可pop时,则进入阻塞等待等待timeout秒,若期间有数据进来,则pop,否则等待至超时返回nil和等待时间
2、brpop key1 key2 timeout (阻塞版本rpop)
3、lrem key count value (删除count个key中的value值,因为list允许数据重复,因此支持删除多个同个重复元素)


set
说明:

1、set类型用来存储大量的数据,在查询方面提供更高的效率。
2、该类型为hash的变形,key不变,filed存放value,原value域为nil。
应用场景:
1、从集合内随机推送数据,如推送歌曲等
2、推送共同好友、共同关注
3、获取好友购物车中共同添加的物品
4、网站的用户黑白名单统计,访问前set黑名单中检查后再判断是否放行
5、网站基于cookie、ip、网页打开次数的访问数统计等
注意事项:
1、该类型内的数据不允许重复
2、set与hash存储结构相同,但set中的value域禁止使用
命令:
1、sadd key member1 member2 (添加数据至key)
2、smembers key (获取key的全部数据,注意set获取到的数据顺序与插入顺序无关,是无序的)
3、 srem key member1 member2 (删除key中的指定数据)
4、scard key (获取key内数据总量)
5、sismember key member (查询key中是否存在member,不存在返回0,存在返回1)
扩展操作:
1、srandmember key [count] (随机获取集合中指定数量的数据)
2、spop key (随机获取集合中指定数量的数据,并将这些数据移出集合;key如果大于当前集合中数据总数,则弹出全部数据)
3、sinter key1 key2 (求2个集合的交集)
5、sinterstore destination key1 key2(求2个集合的交集并保存至destination)
6、sunion key1 key2 (求2个集合并集)
7、sunionstore destination key1 key2(求2个集合的并集并保存至destination)
8、sdiff key1 key2 (求2个集合的差集,2个key的顺序不同结果也可能不同;实际为获取key1中 key2没有的数据)
9、sdiffstorestore destination key1 key2(求2个集合的差集并保存至destination,结果与key1 key2的顺序有关)
10、smove source destination member (将source中的member数据移动到destination中)


sorted_set
说明:

该类型为set存储结构的衍生结构,在其基础上增加可排序字段。该类型适合存放大量数据,同时具备排序性质。
应用场景:
1、运用排序特性实现排行榜
2、使用交并集操作可以对多个排行进行累加,统计一个总票数排行;使用srank获取排名,zcore获取票数
3、会员检测,如果会员跳过广告下载加速等。(将会员到期时间当做score值,当到指定时间时,移出该键值,时间可通过time指令在redis获取),名单在该集合中的用户可使用vip功能)
4、有权重的任务或消息队列,使用score值当做权重
注意事项:
1、score域注意不是数据,仅是个序号,用来排序
2、score的范围-9007199254740922~9007199254740922
3、score支持双精度double值,基于双精度浮点数的特征,可能会丢失精度如0.3,0.7属于不可描述,会丢失,0.5=2的-1次方不会丢失,使用的时候要慎重。
4、sorted_set底层还是基于set结构,数据不允许重复,重复添加相同的value会覆盖掉score值
命令:
1、zadd key score1 member1 score2 member2 (插入数据,key为键值,score为序号,member为值)
2、zrange key start stop withscores(遍历sorte_set,按score从小到大排序返回,score相等的后插入的数据排在前面,带withscore时会返回序号(奇数位为数据,偶数位为数字),不带时仅按顺序返回值)
3、zrevrange key start stop withscores (同zrange,但返回数据按score从大到小排序返回)
4、zrem key member member (删除数据)
扩展操作:
1、zrangebyscore key min max withscores limit offset count(查找序号范围在min和max中的数据,按从小到大排序;并输出该结果集中offset开始到count的数据)
注:输入withscores时返回数据带序号,否则不带序号;count为-1时为输出到倒数第一个数据
2、zrevrangebyscore key min max withscores limit offset count(同zrangebyscore,只不过数据为从大到小)
3、zremrangebyrank key start stop (删除由小到大排列中,排序为start 至 stop的数据)
4、zremrangebyscore key min max (删除集合中,score在min至max范围中的数据)
5、zcard key (查询数据数量)
6、zcount key min max (查询key中在min和max之间的数组数量)
7、zinterstore destination numkeys key key (取交集到destination)
注:numkey代表求几个key的交集,求出的交集value不变,相同value的 score相加。
8、zunionstore destination numkeys key key (取并集到destination)
注:numkey代表求几个key的交集,求出的交集value不变,相同value的 score相加。
9、srank key member (获取member的索引,数据按从小到大排列;注意索引从0开始)
10、zrevrank key member (获取member的索引,数据按从大到小排列;注意索引从0开始)
11、zcore key member (获取member的score值)
12、zincrby key increment member (对member进行增加increment的操作;increment为负数时是做减操作)


持续更新中...
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值