zoukankan      html  css  js  c++  java
  • Redis的五种数据结构及操作命令

    简介

    程序是用来处理数据的,redis是用来存储数据的;程序处理完的数据要存储在redis中,不同特点的数据要存储在redis中不同类型的数据结构中。

    原子性:

    所谓原子操作是指不会被线程调度机制打断的操作;

    这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。

    (1)在单线程中, 能够在单条指令中完成的操作都可以认为是" 原子操作",因为中断只能发生于指令之间。

    (2)在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。Redis单命令的原子性主要得益于Redis的单线程。

    原子性,有一个失败则都失败

    案例:

    java中的i++是否是原子操作?不是

    i=0;两个线程分别对i进行++100次,值是多少?2~200

    Redis中key的操作命令

    1.keys  匹配符(查看数据库中的key)

    1.1.1  keys *       作用:查询数据库中所有key                   匹配符: * 匹配0个或多个字符             

    例:keys k*   k字开头的所有key;keys k*o  k字开头o结尾的所有key...

    1.1.2   keys k?    作用:以k开头后的一个字符的key         匹配符:? 匹配1个字符   

    例:keys k?o 查询的是以k开头o结尾并且中间只有一个字符的key   

    1.1.3   keys k[abc]o 作用:以k开头o结尾并且中间包含abc字符的key   匹配符:[匹配[ ]里包含的字符       

    2.exists key(判断key是否存在)

    2.1.1 exists k1  如果存在返回1 不存在返回0   可以是exists k1 k2 k3   存在几个返回几个数量值    java中根据值判断key是否存在

    3.move key index(移动指定key到其他数据库实例   index数据库实例编号 不常用 每个项目都是单独的数据库实例 乱移数据会乱)

    4.ttl key(查看key生存时间 没有设置返回-1 永远存在(数据库不关) key不存在返回-2)

    5.expire key seconds(设置key的生存时间 seconds设置秒数)

    6.type key(查看指定key的数据类型)

    7.rename key newkey(重命名key)

    8.del key(删除指定key 可以是del key1 key2 key3 key4 返回的是实际删除key的数量 key3 key4不存在 key1 key2 存在返回的值是2)

     

    Redis中五种数据结构及操作命令

    一.字符串类型 String

    简介:redis中最基本的数据结构,能存储任何类型数据,包括二进制数据、序列化后的数据、json化的对象或者一张图片;最大存储容量512M。

    单key 单value

    操作命令

    1.set key value(添加操作)

    2.get key(获取对应key的value)

    3.append key value(追加字符串 返回追加后的字符串长度) 

    注:如果key不存在,则新建key和value 相当于set key value

    4.setlen key(获取字符串的长度)

    5.incr key(字符串数值+1运算 返回+1运算后的value值)

    注:key不存在,则新建key,value值初始化为0,进行+1运算;key的value值必须是数值否则报错

    6.decr key(字符串数值-1运算 返回-1运算后的value值)

     注:key不存在,则新建key,value值初始化为0,进行-1运算;key的value值必须是数值否则报错

    7.incrby key offset(字符串数值+offset运算 返回+offset的value值) offset自己设置的数值

    注:key不存在,则新建key,value值初始化为0,进行+offset运算;key的value值必须是数值否则报错

    8.decrby key offset(字符串数值-offset运算 返回-offset的value值) offset自己设置的数值

    注:key不存在,则新建key,value值初始化为0,进行-offset运算;key的value值必须是数值否则报错

    9.getrange key startIndex endIndex(闭区间截取从startindex到endIndex的字符串)

    注:下标从左到右为0开始;下标从右到左为-1开始

    10.setrange key startIndex value(将指定key的value值 从startIndex下标开始使用value进行覆盖)

    注:value长度为多少就覆盖多少字符

    11.setex key seconds value (设置key和value的同时设置它的生命周期 seconds设置的秒数)

    12.setnx key value(当key不存在则添加,否则失败     解决当key存在,后面key的value值对前面key的value值重写)

    13.mset key value key1 value1 keyx valuex (批量添加)

    注:会覆盖以存在的key的value值

    14.mget key key1 keyx(批量获取key)

    15.msetnx key value key1 value1 keyx valuex(批量添加,当所有key都不存在则添加,否则存在一个都失败)

    二.列表类型 List

    简介:简单的字符串列表,按照插入顺序排序元素可以重复,底层链表结构。

    单key 多value 有序(按照插入的顺序)

    应用场景

    1、最新消息排行等功能(比如朋友圈的时间线) 2、消息队列

    操作命令

    1.lpush key value value1 valuex(将一个或多个value值依次插入到列表的表头 左侧) 

    注:添加顺序是 valuex value1 value 依次向左插入

    2.lrange key startIndex endIndex(获取指定列表中指定区间的数据)

    3.rpush key value value1 valuex(将一个或多个value值依次插入到列表的表尾 右侧) 

    注:添加顺序是 value value1 valuex 依次向右插入

    4.lpop key (移除并且返回表头元素)

    5.rpop key (移除并且返回表尾元素)

    6.lindex key index(获取列表指定的下标元素)

    7.llen key(获取列表长度)

    8.lrem key count value(移除count个跟value值相同的数据)

    注:count>0从列表左侧移除count个跟value值相同的数据;count<0从列表右侧移除count个value值相同的数据;count=0为移除所有value值相同的数据

    9.ltrim key startIndex endIndex(截取指定范围的值,在赋给列表)

    10.lset key index value(指定的下标修改value值)

    11.linsert key before/after value1 value(在指定列表的value1元素 之前/之后插入value值)

    三.集合类型 Set

    简介:是String类型的无序无重复集合。

    单key 多value

    应用场景

    1.共同好友 2.让一个用户只能点赞一次

    操作命令

    1.sadd key value value1 valuex(将一个或多个元素添加到集合中)

    注:元素存在则忽略不添加;返回成功的个数

    2.smembers key(获取指定集合的所有元素)

    3.sismember key member(判断指定元素在指定集合中是否存在)

    注:存在返回1;不存在返回0

    4.sard key (获取集合长度)

    5.srem member member1 memberx(移除1个或多个元素)

    注:不存在的元素会被忽略;返回成功移除的个数

    6.srandmember key [count](获取在指定集合中的一个或多个随机元素)

    注:count>0随机获取数据不能重复;当count<0随机获取数据可能会重复

    7.spop key [count](在指定集合中随机移除一个或多个元素)

    8.smove key key1 member(将指定集合中的元素移动到另一个集合中)

    9.sdiff key key1 key2(获取第一个key集合中有,其他集合没有的元素 差集)

    10.sinterkey key1 key2(获取所有指定的集合中都有的元素 交集)

    11.sunion key key1 key2(获取所有指定的集合中的元素 并集)

    四.哈希类型 Hash

    简介:是String类型的fieid和value的映射表,适合存储对象。

    单key多value模式不变,但value是键值对

    应用场景

    存储、读取、修改用户属性

    操作命令

    1.hset key field1 value1 [field2 value2](将一个或多个键值对放到hash表中)

    2.hget key field(获取指定的field的value值)

    3.hmget key field [field1 field2](批量获取多个field值)

    4.hgetall key(获取指定哈希表中所有field和value)

    5.hdel key field[field1 field2](删除一个或多个field)

    6.hlen key(获取指定hash表中的field个数)

    7.hexists key field(判断hash表中是否存在某一个field)

    8.hkeys key(获取指定hash表中的所有field列表)

    9.hvals key(获取指定hash表中的所有value列表

    10.hincrby key field int(对指定hash表中指定的field进行整数加法运算)

    11.hincrbyfloat key field float(对指定hash表中指定的field进行浮点数数加法运算)

    12.hsetnx key field value(添加操作,当key-filed存在时放弃添加,否则添加)

    五.有序集合类型 Zset

    简介:和set一样是String类型的集合,且不允许重复;Zset每个元素都会关联一个分数(分数可以重复),redis通过分数为集合中的成员进行从小到大的排序。

    有序集合 

    应用场景

    1、排行榜 2、查看点赞数最多的

    操作命令

     1.zadd key score member[score1 member1](将一个或多个member及其score分数值加入到有序集合中)

    注:如添加时 member存在 score会覆盖已存在的

    2.zrange key startIndex endIndex[withscores](获取指定有序集合中指定区间的元素 并按照score从小到大排序  withscores分数也显示

    3.zrangebyscore key min max(获取指定有序集合中指定分数区间的元素 withscores分数也显示

    4.zrem key member[member](删除指定有序集合中一个或多个元素)

    5.zcard key(获取指定有序集合中所有元素的个数)

    6.zcount key min max(获取指定有序集合中分数在指定区间内元素的个数)

    7.zrank key member(获取指定有序集合中指定元素的排名  排名从0开始

    8.zscore key member(获取指定有序集合中指定元素的分数)

    9.zrevrank key member获取指定有序集合中指定元素的排名  按照分数从大到小开始

     

  • 相关阅读:
    pyspider 在ubuntu上安装失败怎么搞?
    怎么在项目中使用前端包管理器bower和构建工具gulp
    Asp.net mvc 实时生成缩率图到硬盘
    如果转载优酷、土豆视频等,怎么让视频自适应宽度?
    C语言II博客作业04
    C语言I博客作业03
    C语言II博客作业02
    C语言II博客作业01
    学期总结
    The first essay
  • 原文地址:https://www.cnblogs.com/kmcl1314/p/14420785.html
Copyright © 2011-2022 走看看