zoukankan      html  css  js  c++  java
  • redis5种数据类型的常用命令

    注意:http://redisdoc.com/ 如果想要了解redis各个数据类型具体的用法,可以参考此地址

    也可以参考如下地址:https://www.runoob.com/redis/redis-sets.html

    下面这个图是对redis五种基本数据类型的基本操作进行的总结,参考文章链接在本文最后

    通用方法总结:

    1. redis默认一共有16个库,编号分别为0-15 默认为0号库,可以通过select来切换,语句为:select 1(意思是切换到1号库)

    2. del key1 key2:单个/多个删除key(key存在)。

    3. expire key second:为给定key设置过期时间,单位为秒。

    4. ttl key:以秒为单位,返回给定key的剩余生存时间(TTL , time to live),不存在key返回-2,无过期时间的key返回-1。pttl key为毫秒。

    5. persist key:移除key的过期时间,key将持久保存。

    6. type key:返回key所存储的值的类型,不存在的key返回none。

    7. exists key:检查给定的key是否存在。

    8. dbsize:查找当前数据库的key的数量。

    9. keys pattern:查找所有符合给定模式(pattern)的key。

    10. rename key newkey:给key重命名。

    11. randomkey:从当前数据库中随机返回一个key。

    String--字符串

     

    字符串是redis最基本的数据结构,他将以一个键和一个值存储于redis内部,类似于java里的map。redis可以通过键去找到值。

    1. set key value:写入命令。

    2. get key:读取命令,通过键获取值。

    3. del key:删除命令,通过key删除键值对,返回删除数(通用命令--其他数据结构也可以使用这个命令)。

    4. strlen key:取key指向字符串的长度,返回长度值。

    5. getset key value:修改原来key的对应值,并将旧值返回,如果原来值为空,则返回空,并设置新值。

    6. getrange key start end:获取子串,start和end代表角标,redis是从0开始计算的。

    7. append key value:在原来串的最后添加上新的value,返回key指向新字符串的长度。

    Hash--哈希

     

    redis中的哈希结构就如同java的map一样,一个对象中有很多键值对,他是特别适合存储对象的,如果内存足够大,那么一个redis的hash结构可以存储232-1键值对(40多亿)。在redis中,hash是一个string类型的field和value的映射表,因此我们存储的数据实际在redis内存中都是一个个字符串而已。比如一个角色有三个字段,编号(id),姓名(name),年龄(age),那么它的角色hash结构如图

    1. role_1:意思是key,通过它就可以找到这个hash结构

    2. field和value:hash结构由一系列的field和value组成

     常用的命令

    1. hmset key field1 value1 fileld2 value2...:在hash结构中设置多个键值对。

    2. hset key field value:在hash结构中设置单个键值对。返回长度

    3. hgetall key:获取所有hash结构中的键值。返回键和值。

    4. hmget key field1 field2...:获取指定的键值对的值。

    5. hdel key field1 field2...:删除hash结构中指定的字段。

    6. hsetnx key field value:当hash结构中不存在对应的键,才设置值。

    7. hlen key:获取hash结构中键值对的熟练

    8. hkeys key:获取所有hsh结构中的键

    9. hvals key:获取hash结构中所有的值。

    10. hexists key field:判断hash结构中是否存在field字段。存在返回1,否则返回0.

    11. hincrby key field increment:指定给hash结构中的某一个字段加上一个整数,要求该字段也是整数字符串。

    12. hincrbyfloat key field increment:指定给hash结构中的某一个字段加上一个浮点数,要求该字段是数字型字符串。

     linked-list---链表

     

    redis的链表结构可以存储多个字符串,并且它是有序的,可以存储232-1个节点(超过40亿),redis链表是双向的,因此可以从左到右,也可以从右到左遍历它存储的节点。链表结构的优势在于插入和删除,因为链表的数据节点是分配在不同的内存区域的,并不连续,只是根据上一个节点保存下一个节点的顺序来索引而已,无需移动元素,劣势在于查找。因为是双向的,所以redis链表命令分为左操作和右操作两种命令,左操作意味着从左到右,右操作意味着从右到左。

    其中命令以 ‘l’ 开头的代表左操作,以 ‘r’ 开头的代表右操作。 

    1. lpush key node1 node2...:把节点加入到链表最左边,如图最后链表的从左到右顺序应该为node3--node2--node1

    2. rpush key node1 node2...:把节点加入到链表的最右边,如图最后链表的从左到右的顺序应该为node1--node2--node3

     

    3. lindex key index:读取下标为index的节点,返回节点字符串,从0开始算。

    4. llen key:求链表的长度。返回链表节点数。

    5. lpop key:删除左边第一个节点,并将其返回。

    6. rpop key:删除右边第一个节点,并将其返回。

    7. linsert key before|after pivot node:插入一个节点node,并且可以指定在值为pivot的节点的前面或者后面,如果list不存在,则报错,如果没有值为对应pivot的,也会插入失败返回-1

    8. lpushx list node:如果存在key为list的链表,则插入节点node,并且作为从左到右的第一个节点。如果不存在,则失败。

     

    9. rpushx list node:如果存在key为list的链表,则插入节点node,并且作为从左到右的最后一个节点。如果不存在,则失败。

     

    10. lrange list start end:获取链表list从start下标到end下标的节点值。包含两边的。

     

    11. lrem list count value:如果count为0,则删除所有值等于value的节点,如果count不为0,则先对count取绝对值,假设记为abs,然后从左到右删除不大于abs个等于value的节点,注意:count为整数,如果为负数,则redis会先求取其绝对值,然后传递到后台操作。

     

    12. lset key index node:设置列表下标为index的节点的值为node

     

    13. ltrim key start stop:修剪链表,只保留从start到stop的区间的节点,其余的都删除掉,包含start和end的节点会留下。

     

    另外提供几个链表的阻塞命令

    1. blpop key timeout:移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止,相对于lpop命令,它的操作是进程安全的。

    2. brpop key timeout:移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。相对于rpop命令,它的操作是进程安全的。

    3. rpoplpush key src dest:按从左到右的顺序,将一个链表的最后一个元素移除,并插入到目标链表最左边。不能设置超时时间。

    4. brpoplpush key src dest timeout:按从左到右的顺序,将一个链表的最后一个元素移除,并插入到目标链表最左边,并可以设置超时时间。

    set---集合

     

    redis的集合不是一个线性结构,而是一个哈希表结构,他的内部会根据hash分子来存储和查找数据。要注意:

    1. 集合是无序的。

    2. 对于集合而言,它的每一个元素都是不能重复的,当插入相同记录的时候都会失败。

    3. 集合的每一个元素都是string数据结构类型。

    4. redis的集合可以对于不同的集合进行操作,比如求出两个或者以上集合的交集,差集和并集等。

    5. 通过这些操作我们可以实现sns中的好友推荐和bolog的tag功能。

    集合命令如下:

    1. sadd key value:添加set集合 可以多添加

    2. smembers key:查看元素

    3. srem key value:删除元素,可以多个删除,删除的时候需要指定key和value值

    4. spop key [count]:随机删除1个/n个值 其中count不写就是默认一个值,count写就是删除对应熟练的值。被移除的随机元素。 当集合不存在或是空集时,返回 nil 。

    5. sdiff key1 key2:取两个集合的差集,以前面的那个集合为主

    6. sinter key1 key2:取两个集合的交集

    7. sinterstore newkey key1 key2:取两个集合(set1 set2)的交集,之后存入新的集合中(set3)

    8. sunion key1 key2:取两个集合(set1 set2)的并集

    9. sunionstore newkey key1 key2:取两个集合(key1 key2)的并集并将结果存入新key中(newkey)

    10.scard key:获取元素的个数。

    11. sismember key value:判断某个值是否存在于对应的key中,存在返回1,不存在返回0。

    12. srandmember key:随机返回一个元素。

    13. smove key1 key2 value:将key1 中的某个元素value移除,并添加到第二个key2中。

     Sorted Set---有序集合

     

    Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

    1. 不同的是每个元素都会关联一个double类型的分数。

    2. redis正是通过分数来为集合中的成员进行从小到大的排序。

    3. 有序集合的成员是唯一的,但分数(score)却可以重复。

    4. 分数可以为负数。

    有序集合命令如下:

    1. zadd key score value:插入一个/多个元素,其中score可以重复,但是value不能重复

    2. zcard key:返回元素个数。

    3. zcount key minScore  maxScore :查询score分数在count1和count2区间的值的个数(包括minScore  maxScore 和maxScore )

    4. zrevrange key count1 count2:用于返回指定分数区间内的成员。其中成员的位置按分数值递减(从大到小)来排序。(这里的1和4是角标,从0开始算的)

    5. zrem key value:删除

    参考:https://www.cnblogs.com/epipremnum-aureum/p/8619092.html

    持续更新!!!

  • 相关阅读:
    HDU5794 A Simple Chess 容斥+lucas
    HDU5790 Prefix 字典树+主席树
    HDU5787 K-wolf Number 数位dp
    HDU5758 Explorer Bo 树形dp
    HDU5764 After a Sleepless Night 树形乱搞题
    HDU5780 gcd (BestCoder Round #85 E) 欧拉函数预处理——分块优化
    HDU5779 Tower Defence (BestCoder Round #85 D) 计数dp
    HDU 5778 abs (BestCoder Round #85 C)素数筛+暴力
    HDU5777 domino (BestCoder Round #85 B) 思路题+排序
    poj 1185 状态压缩
  • 原文地址:https://www.cnblogs.com/flyinghome/p/12163653.html
Copyright © 2011-2022 走看看