zoukankan      html  css  js  c++  java
  • Redis五种数据类型命令介绍(4)

    redis优缺点

    优点:对数据库高并发读写 、对海量数据的高效率存储和访问、对数据的可扩展性和高可用性

    缺点:redis ACID处理非常简单、无法做到太复杂的关系数据库模型

    1、string类型命令

    设置值:set id 001 获取值:get id  删除键值:del id  验证键是否存在:exists id

    显示所有的key:keys * 

    incr 、incrby指定增加多少、decr、decrby 指定减少多少

    127.0.0.1:6379> set counter 1

    OK

    127.0.0.1:6379> incr counter

    (integer) 2

    127.0.0.1:6379> incr counter

    (integer) 3

    127.0.0.1:6379> incrby counter 2

    (integer) 5

    127.0.0.1:6379> incrby counter 3

    (integer) 8

    127.0.0.1:6379> decr counter

    (integer) 7

    127.0.0.1:6379> decrby counter 2

    (integer) 5

    getset 先获取在设置getset name lisi

    mget、mset批量设置、msetnx带事务性的赋值,如果key存在,事务回归,不做赋值处理

    127.0.0.1:6379> mset name zhangsan age 11

    OK

    127.0.0.1:6379> mget name age

    1) "zhangsan"

    2) "11"

    append 追加字符串append name "teacher"

    strlen 字符串长度、substr字符串截取substr name 0 6

    setex设置过期时间命令单位是秒setex sex 20 male

    setnx 设置值,如果key有值,不成功,返回0,否则为1,setnx name tom

    setrange 从指定位置开始替换值

    127.0.0.1:6379> set myemail abc@sohu.com

    OK

    127.0.0.1:6379> get myemail

    "abc@sohu.com"

    127.0.0.1:6379> setrange myemail 4 163.com

    (integer) 12

    127.0.0.1:6379> get myemail

    "abc@163.comm"

    getrange字符串截取getrange name 0 6 替换substr命令

     2、list类型命令

    list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等。

    我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,又可以作为队列。

    1、redis中list列表的数据插入命令:lpush,rpush,linsert,lrange

    127.0.0.1:6379>rpush mylist 1   ---结果为:(integer) 1

    127.0.0.1:6379>rpush mylist 2   ---结果为:(integer) 2

    127.0.0.1:6379>rpush mylist 3   ---rpush命令:向mylist列表中,从右边插入3条数据,返回值为当前列表的容量。结果为:(integer) 3

    rpush批量插入  rpush mylist 1 2 3

    127.0.0.1:6379>lrange mylist 0 -1   ---lrange命令:查看mylist列表中的数据,0开始位置,-1结束位置,结束位置为-1时,表示列表的最后一个位置,即查看所有。结果为:1> "1"  2> "2"  3> "3"

    127.0.0.1:6379>lpush mylist 0   ---lpush命令:向mylist列表中,从左边插入一条数据为0的数据

    127.0.0.1:6379>lrange mylist 0 -1   ---结果为:1>"0"  2>"1"  3>"2"  4>"3"

    127.0.0.1:6379>linsert mylist after 3 4   ---linsert命令,表达式为linsert key before|after pivot value ;这句命令的意思是在key为mylist的列表中查找值为3的数据,在其后插入一条值为4的数据。

    127.0.0.1:6379>lrange mylist 0 -1   ---结果为:1>"0"  2>"1"  3>"2"  4>"3"  5>"4"

    127.0.0.1:6379>linsert mylist before 0 -1   ---意思是:在key为mylist的列表中查找值为0的数据,在其前插入一条值为-1的数据。

    127.0.0.1:6379>lrange mylist 0 -1    ---结果为:1>"-1"  2>"0"  3>"1"  4>"2"  5>"3"  6>"4"

    127.0.0.1:6379>lisert mylist after 5 8    ---结果为:-1,由于mylist列表不存在值为5的数据,所以不执行任何操作,返回状态值-1。如果key不存在时,返回错误提示。

    127.0.0.1:6379>lrange mylist 0 -1   ---结果为:1>"-1"  2>"0"  3>"1"  4>"2"  5>"3"  6>"4"

    2、redis中list列表的数据删除命令:lpop,rpop,ltrim

    127.0.0.1:6379>lpop mylist    ---lpop命令:从列表中的左边移除一条数据,同时输出被删除的数据,这里输出的结果为-1

    127.0.0.1:6379>lrange mylist 0 -1   ---结果为:1>"0"  2>"1"  3>"2"  4>"3"  5>"4"

    127.0.0.1:6379>rpop mylist   ---rpop命令:从列表的右边移除一条数据,同时输出被删除的数据,这里输出的结果为4

    127.0.0.1:6379>lrange mylist 0 -1   ---结果为:1>"0"  2>"1"  3>"2"  4>"3" 

    127.0.0.1:6379>ltrim mylist 1 3   ----ltrim命令:保留设定的两个下标区间的值,删除不在其区间的所有值。1为开始保留的下标值,3为结束保留的下标值。

    127.0.0.1:6379>lrange mylist 0 -1   ---结果为:1>"1"  2>"2"  3>"3" 

    3、redis中list列表的数据查看命令:llen,lindex

    127.0.0.1:6379>llen mylist   ---llen命令:返回列表的长度,这里mylist只剩下4条数据,故输出结果为4

    127.0.0.1:6379>lindex mylist 3   ---lindex命令:获取给定位置的数据,这里坐标为3的数据是"2",所以结果为2.

    4、redis中list列表数据修改命令:lset

    127.0.0.1:6379>lset mylist 2 zlh   ---lset命令:把下标为2的值设置为zlh,如果下标值超出范围或对一个空list列表进行lset,那么将返回一个错误提示

    127.0.0.1:6379>lrange mylist 0 -1   ---结果为: 1>"1"  2>"2"  3>"zlh"

    5、redis中list列表,两个列表A,B,将A列表的尾元素添加到B列表的头元素中,命令:rpoplpush

    #这里我有连个列表A数据为{1,2,3} ,B列表数据为{4,5,6}

    127.0.0.1:6379>rpoplpush A B

    127.0.0.1:6379>lrange A   ---结果为:1>"1' 2>"2"

    127.0.0.1:6379>lrange B   ---结果为:1>"3' 2>"4" 3>"5" 4>"6"

    6、redis中的几个带阻塞的高级命令:blpop,brpop,brpoplpush

    127.0.0.1:6379>blpop A 30   ---意思是:A列表有值的话,从左边移除一个数据,如果没有值的话,则等待A中插入数据为止,等待时间为30秒,如果时间设置为0表示阻塞时间无限延长

    127.0.0.1:6379>brpoplpush A B 30   ---意思是:将A列表的尾元素添加到B列表的头元素中,如果A列表中有值则插入,如果没值,则等待A中插入数据为止,等待时间为30秒,如果时间设置为0表示阻塞时间无限延长

    3、Set类型

    Set和list都是字符串序列,非常相似,不同的是Set是用哈希表来保持字符串的唯一性,没有先后顺序。

    redis中set列表的新增命令Sadd,key值相同下的value值不能重复,返回插入的数据个数,key后面可跟多个value值

    127.0.0.1:6379>sadd mySet 1   ---添加key为mySet的set数据值为1,

    127.0.0.1:6379>sadd mySet 2 4 5  ---添加key为mySet的set数据值为2 4 5,

    redis中查看set数据集合的命令:smembers,可以获取全部的元素,当set成员比较多时考虑其性能啊

    127.0.0.1:6379>smembers  mySet     ---获取key为mySet的说有set数据值集合

    redis中set判断某个key的value中是否存在某个值的命令:sismember ,如果存在返回1,不存在返回0

    127.0.0.1:6379>sismember mySet 3  ---返回值为0,因为myset的set成员中只有1,2没有3

    127.0.0.1:6379>sismember mySet 2   ---返回值为1,因为myset的Set成员中存在2.

    redis中set的删除数据命令srem,返回删除个数,key后面可跟多个value值

    127.0.0.1:6379>srem mySet 1   ---删除key为mySet,value为1的数据项。

    127.0.0.1:6379>srem mySet 2 4     ---删除key为mySet,value为2和4的2个数据项。

    redis中查看set数据个数的命令scard,如果不存在返回0

    127.0.0.1:6379>scard mySet   ---查看mySet中存在多少个数据项

    redis中set随机查看元素命令srandmember

    127.0.0.1:6379>srandmember mySet   ---输出key为mySet的数据项中的随机一个value,

    redis中set随机删除一个元素的命令spop,并返回输出删除的数据

    127.0.0.1:6379>spop mySet    ----随机从key为mySet的数据集合中删除一条数据,并返回输出删除的数据

    redis中set将一个set中的元素移动到另外一个set中的命令smove

    127.0.0.1:6379>sadd mySet 1 2 3    ----向mySet中添加3条数据 1 2 3

    27.0.0.1:6379>sadd youSet 3 4 5     ----向youSet中添加3条数据 3 4 5

    127.0.0.1:6379>smove youSet mySet 4  ---将youSet中的数据4移除的同时将数据4添加到mySet中

    127.0.0.1:6379>smembers mySet   ---结果为:1 2 3 4

    127.0.0.1:6379>smembers youSet   ---结果为 3 5

    redis中set求交集命令sinter

    127.0.0.1:6379>sinter mySet youSet   ---输出结果为mySet和youSet的交集,输出结果为:3

    redis中set求并集的命令sunion

    127.0.0.1:6379>sunion mySet youSet    ---输出结果为mySet与youSet的并集,输出结果为:1 2 3 4 5 

    redis中set求差集的命令sdiff

    127.0.0.1:6379>sdiff mySet youSet     ---输出结果为mySet中youSet不存在的数据,输出结果为:1 2 4

    127.0.0.1:6379>sdiff youSet mySet   ---输出结果为youSet中mySet不存在的数据,输出结果为:5

    4、SortedSet类型命令

    Sorted set是set的一个升级版本,它在set的基础上增加了一个顺序属性,这一属性在添加修改元素时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解为有两列字段的数据表,一列存value,一列存顺序编号。操作中key理解为zset的名字。

    有序集合Zset的操作:

    zadd:向名称为key的zset中添加元素member,score用于排序。如果该元素存在,则更新其顺序。(用法:zadd 有序集合顺序编号元素值)

    127.0.0.1:6379> zadd zset1 1 two
    (integer) 1
    127.0.0.1:6379> zadd zset1 2 one
    (integer) 1
    127.0.0.1:6379> zadd zset1 3 seven
    (integer) 1

    127.0.0.1:6379> zrange zset1 0 -1 
    1) "two"
    2) "one"
    3) "seven"
    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "one"
    4) "2"
    5) "seven"
    6) "2"

    zrem:删除名称为key的zset中的元素。(用法:zrem 有序集合要删除的元素值)

    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "one"
    4) "2"
    5) "seven"
    6) "2"
    127.0.0.1:6379> zrem zset1 one
    (integer) 1
    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "seven"
    4) "2"

    zincrby:如果在名称为key的zset中已经存在元素member,则该元素的score增加increment,否则向该集合中添加该元素,其score的值为increment.即对元素的顺序号进行增加或减少操作。(用法:zincrby 有序集合 increment 指定的元素值)

    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "seven"
    4) "2"
    127.0.0.1:6379> zincrby zset1 5 seven
    "7"
    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "seven"
    4) "7"

    zrank:返回名称为key的member元素的排名(按score从小到大排序)即下标。(用法:zrank 有序集合指定的元素值),返回值为指定的元素值的索引下标号。

    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "seven"
    4) "7"
    127.0.0.1:6379> zrank zset1 seven
    (integer) 1

    zrevrank:返回名称为key的member元素的排名(按score从大到小排序)即下标。(用法:zrank 有序集合指定的元素值)

    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "seven"
    4) "7"
    127.0.0.1:6379> zrevrank zset1 seven
    (integer) 0

    zrange:显示集合中指定下标的元素值(按score从小到大排序)。如果需要显示元素的顺序编号,带上withscores。(用法:zrange 有序集合  下标索引1 下标索引2 withscores)

    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "five"
    4) "2"
    5) "one"
    6) "3"
    7) "seven"
    8) "7"

    zrevrange:显示集合中指定下标的元素值(按score从大到小排序)。如果需要显示元素的顺序编号,带上withscores。(用法:zrevrange 有序集合  下标索引1 下标索引2 withscores)

    127.0.0.1:6379> zrevrange zset1 0 -1 withscores
    1) "seven"
    2) "7"
    3) "one"
    4) "3"
    5) "five"
    6) "2"
    7) "two"
    8) "1"

    zrangebyscore:显示指定范围顺序编号的元素(按score从小到大排序)。(用法:zrangebyscore 有序集合顺序编号1 顺序编号2 withscores)

    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "five"
    4) "2"
    5) "one"
    6) "3"
    7) "seven"
    8) "7"
    127.0.0.1:6379> zrangebyscore zset1 2 7 withscores
    1) "five"
    2) "2"
    3) "one"
    4) "3"
    5) "seven"
    6) "7"

    zcount: 返回集合中score在给定区间的数量。(用法:zcount 有序集合顺序编号1 顺序编号2) 

    127.0.0.1:6379> zcount zset1 2 7
    (integer) 3

    zcard:返回集合中元素个数。(用法:zcard 有序集合)

     127.0.0.1:6379> zrange zset1 0 -1
    1) "two"
    2) "five"
    3) "one"
    4) "seven"
    127.0.0.1:6379> zcard zset1
    (integer) 4

    zremrangebyrank:删除集合中排名在给定区间的元素。(按索引下标删除)(用法:zremrangebyrank 有序集合索引编号1 索引编号2) 

    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "five"
    4) "2"
    5) "one"
    6) "3"
    7) "seven"
    8) "7"
    127.0.0.1:6379> zremrangebyrank zset1 3 3
    (integer) 1
    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "five"
    4) "2"
    5) "one"
    6) "3"

    zremrangebyscore:删除集合中score在给定区间的元素(按顺序score值来删除)。(用法:zremrangebyscore 有序集合顺序编号1 顺序编号2)

    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "five"
    4) "2"
    5) "one"
    6) "3"
    7) "seven"
    8) "7"
    127.0.0.1:6379> zremrangebyscore zset1 5 7
    (integer) 1
    127.0.0.1:6379> zrange zset1 0 -1 withscores
    1) "two"
    2) "1"
    3) "five"
    4) "2"
    5) "one"
    6) "3"

    5、hash类型

    redis中hash对单个key/value操作的命令演示

    redis中hash的添加命令hset,如果key不存在,创建key,存在,则覆盖原有值

    redis 127.0.0.1:6379>hset myhash name Jim  ----给key为myset的键值设置键为name值为Jim

    redis中hash的查看命令hget

    redis 127.0.0.1:6379>hget myhash name   ----输出: "Jim",获取key为myset,键为name的value

    redis 127.0.0.1:6379>hset myhash name zlh   ----覆盖原有值,值改为zlh替换Jim 

    redis 127.0.0.1:6379>hget myhash name   ---输出:"zlh"

    redis中hash的获取key包含的field数量的命令hlen

    redis 127.0.0.1:6379>hset myhash age 31 --- 设置key为myset键为age的value=31

    redis 127.0.0.1:6379>hlen myhash   ---输出为2,key为myset的field数量为2

    redis中判断指定key中指定field是否存在的命令hexists,存在返回1,不存在返回0

    redis 127.0.0.1:6379>hexists myhash name   ---返回1,说明存在

    redis 127.0.0.1:6379>hexists myhash name1  ---返回0,说明不存在

    redis中hash删除命令hdel,删除一个或多个指定的字段

    redis 127.0.0.1:6379>hset myhash sex nan   ----添加数据

    redis 127.0.0.1:6379>hset myhash issingle yes  ----添加数据

    redis 127.0.0.1:6379>hset myhash hobby sports  ----添加数据

    redis 127.0.0.1:6379>hdel myhash hobby  ----删除单个数据,filed为hobby的数据

    redis 127.0.0.1:6379>hdel myhash issingle sex   ---删除多个数据,filed为issingle和sex的两条数据

    redis中hash如果key或field不存在插入有效,否则不采取操作的命令hsetnx

    redis 127.0.0.1:6379>hsetnx myhash sex nan   ---设置myhash,field为sex的value为nan,成功返回1,因为原来不存在sex这个字段

    redis 127.0.0.1:6379>hsetnx myhash sex nv   ---设置myhash,field为sex的value为nv,不成功返回0,因为原来存在sex这个字段并且有值

    redis 127.0.0.1:6379>hget myhash sex   --输出"nan"

    redis中hash中的value为数值时操作增减的命令hincrby

    redis 127.0.0.1:6379>del myhash  ---删除该键

    redis 127.0.0.1:6379>hset myhash age 31  ---设置key为myhash的键为age值为31

    redis 127.0.0.1:6379>hincrby myhash age 10   ---给key为myhash,键为age的值加10,输出结果为41

    redis 127.0.0.1:6379>hincrby myhash age -10   ---给key为myhash,键为age的值减去10,输出结果为31

    redis中hash批量操作key/value的命令演示

    批量添加key/value的命令hmset

    redis 127.0.0.1:6379>del myhash  --删除该键

    redis 127.0.0.1:6379>hmset myhash name zlh age 31 issingle no ----给key为myhash的hash添加name=zlh,age=31,issingle=no的多个键值

    批量获取key/value的命令hmget

    redis 127.0.0.1:6379>hmget myhash name age issingle   ----输出结果为:zlh 31 no

    根据myhash键获取所有的字段及value的命令hgetall

    redis 127.0.0.1:6379>hgetall myhash   ----输出结果为:name age issingle zlh 31 no

    获取所有的field的命令hkeys

    redis 127.0.0.1:6379>hkeys myhash   ---输出结果为:name age issingle

    获取所有字段的值的命令hvals

    redis 127.0.0.1:6379>hvals myhash  ----输出结果为:zlh 31 no

  • 相关阅读:
    『cs231n』作业2选讲_通过代码理解优化器
    谷歌(Google)学术镜像,谷歌镜像
    官网实例详解-目录和实例简介-keras学习笔记四
    深度挖坑:从数据角度看人脸识别中Feature Normalization,Weight Normalization以及Triplet的作用
    NIPS 2018 | 程序翻译新突破:UC伯克利提出树到树的程序翻译神经网络
    烧脑!CMU、北大等合著论文真的找到了神经网络的全局最优解
    win7+cuda+anaconda python+tensorflow-gpu+keras安装成功版本匹配汇总
    Delphi 在DLL中使用DevExpress控件时出错解决办法
    让文件添加鼠标右键菜单
    phpStudy模式下安装ssl证书,详细版
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/5292416.html
Copyright © 2011-2022 走看看