zoukankan      html  css  js  c++  java
  • Redis基础命令

    操作数据:redis具备五种数据类型
      String
      Hash
      List
      Set
      Zset

    String类型(包含基础命令)
    keys * :查看当前redis节点(启动的每一个redis服务都叫redis节点。)所有已存在的key值。
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379> set name hanlaoshi
    OK
    127.0.0.1:6379> set location beijing
    OK
    127.0.0.1:6379> keys *
    1) "location"
    2) "name"
    127.0.0.1:6379>

    set key value:存储一个key-value结构的数据(String),覆盖一个同名key值得数据
    127.0.0.1:6379> set age 22
    OK
    127.0.0.1:6379> keys *
    1) "location"
    2) "age"
    3) "name"
    127.0.0.1:6379> get age
    "22"
    127.0.0.1:6379> set age 33
    OK
    127.0.0.1:6379> get age
    "33"
    127.0.0.1:6379>

    get key:获取当前key对应的value数据
    127.0.0.1:6379> get age
    "22"
    127.0.0.1:6379> set age 33
    OK
    127.0.0.1:6379> get age
    "33"
    127.0.0.1:6379>

    select 整数:redis中默认存在16个数据分库(database),index号0-15,在一个服务器节点上,可以区分多种类型,多种功能的数据库仓库,默认登录的是0号分库(现在使用不多)
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> keys *
    (empty list or set)
    127.0.0.1:6379[1]> select 0
    OK
    127.0.0.1:6379> keys *
    1) "location"
    2) "age"
    3) "name"
    127.0.0.1:6379>

    exists key:判断当前节点是否包含key的数据。
    get也可以完成这个任务。redis在key-value结构的value存储容量是512M。使用get判断存在会先读在判断数据是否为空,浪费资源
    127.0.0.1:6379> exists haha kaka age
    (integer) 1
    127.0.0.1:6379> exists age
    (integer) 1
    127.0.0.1:6379> exists haha
    (integer) 0
    127.0.0.1:6379>

    del key:删除key值对应的key-value数据;
    127.0.0.1:6379> del age
    (integer) 1
    127.0.0.1:6379> del haha
    (integer) 0
    127.0.0.1:6379> keys *
    1) "location"
    2) "name"
    127.0.0.1:6379>

    type key:查看当前key的类型
    127.0.0.1:6379> type name
    string
    127.0.0.1:6379>

    help 命令名称:一般到官网查询详细讲解;按照案例

    save:将当前的内存数据保存到磁盘文件(根目录dump.rdb)
    127.0.0.1:6379> keys *
    1) "location"
    2) "name"
    127.0.0.1:6379> save
    OK
    127.0.0.1:6379>
    save前,save后观察redis根目录的dump.rdb大小可以发现已经存储到持久化文件

    flushall:将当前redis所有数据清洗,包括持久化文件,内存数据(创建集群的时候使用)
    127.0.0.1:6379> keys *
    1) "location"
    2) "name"
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> set name wanglaoshi
    OK
    127.0.0.1:6379[1]> set age 11
    OK
    127.0.0.1:6379[1]> keys *
    1) "age"
    2) "name"
    127.0.0.1:6379[1]> save
    OK
    127.0.0.1:6379[1]> flushall
    OK
    127.0.0.1:6379[1]> keys *
    (empty list or set)
    127.0.0.1:6379[1]> select 0
    OK
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379>

    flushdb:清空一个分库的数据,不删除持久化文件内容(进行测试使用)
    127.0.0.1:6379[1]> flushdb
    OK
    127.0.0.1:6379[1]> keys *
    (empty list or set)
    127.0.0.1:6379[1]> select 0
    OK
    127.0.0.1:6379> keys (
    (empty list or set)
    127.0.0.1:6379> keys *
    1) "name"
    127.0.0.1:6379>

    redis中string字符串如果是纯数字,也有一些简单的数字操作命令
    incr decr key:自增1,自减1;计步器
    127.0.0.1:6379> set num 100
    OK
    127.0.0.1:6379> incr num
    (integer) 101
    127.0.0.1:6379> decr num
    (integer) 100
    127.0.0.1:6379>

    多步计步器:incrby decrby key 整数:对key的value数字自增自减去整数步数
    127.0.0.1:6379> incrby num 10
    (integer) 110
    127.0.0.1:6379> decrby num 10
    (integer) 100
    127.0.0.1:6379>

    mset mget:批量操作(不支持多节点分布式,只能对本节点数据进行处理)(测试时确定当前节点拥有的数据)
    127.0.0.1:6379> mset num1 200 num2 300 num3 400
    OK
    127.0.0.1:6379> keys *
    1) "num3"
    2) "name"
    3) "num"
    4) "100"
    5) "num1"
    6) "num2"
    127.0.0.1:6379> mget num1 num2 num3
    1) "200"
    2) "300"
    3) "400"
    127.0.0.1:6379>

    LRU(lasted recent unused)自动删除策略:如果redis内存达到自动删除启动瓶颈 Last Recent Unused最近最久未使用key
    expire key:对key添加超时过期的设定
    配合ttl key可以查看 key值剩余时间,已经超时的内容删除,ttl剩余时间是-2 -1表示永久数据
    127.0.0.1:6379> ttl num1
    (integer) -2
    127.0.0.1:6379> keys *
    1) "num3"
    2) "name"
    3) "num"
    4) "100"
    5) "num2"
    127.0.0.1:6379> ttl name
    (integer) -1
    127.0.0.1:6379>

    append key value :对key对应的value进行追加数据操作;

    Hash数据类型
    对应value为hash结构的数据都是面向对象的数据结构


    hset key field value:key 是 相当于变量名,filed是value中的key-value对中的key,但是面向对象时表示一个对象的属性名称, value表示属性的值
    127.0.0.1:6379> hset user username hanlaoshi
    (integer) 1
    127.0.0.1:6379> hset user age 18
    (integer) 1
    127.0.0.1:6379> hset user location beijing
    (integer) 1
    127.0.0.1:6379> type user
    hash
    127.0.0.1:6379>

    hget key field
    127.0.0.1:6379> hget user username
    "hanlaoshi"
    127.0.0.1:6379>

    hexists key field:判断hash类型中的属性值是否存在
    127.0.0.1:6379> hexists user haha
    (integer) 0
    127.0.0.1:6379> hexists user age
    (integer) 1
    127.0.0.1:6379>

    hmset和hmget:批量设置,不支持分布式
    127.0.0.1:6379> hmset student age 19 name wangxiaoxiao gender male
    OK
    127.0.0.1:6379> hmget student age name gender
    1) "19"
    2) "wangxiaoxiao"
    3) "male"
    127.0.0.1:6379>

    Hdel key field:删除属性和值
    127.0.0.1:6379> hdel student age
    (integer) 1
    127.0.0.1:6379> hget student age
    (nil)
    127.0.0.1:6379>

    Hkeys Hvals:单独获取对象的属性名,或者属性的值



    127.0.0.1:6379> hkeys user
    1) "name"
    2) "username"
    3) "age"
    4) "location"
    127.0.0.1:6379> hvals user
    1) "haha"
    2) "hanlaoshi"
    3) "18"
    4) "beijing"
    127.0.0.1:6379>

    Hlen key:获取属性个数(长度)
    127.0.0.1:6379> hlen user
    (integer) 4
    127.0.0.1:6379> hlen student
    (integer) 2
    127.0.0.1:6379>


    Hincreby:和String类型特性区别的一个体现

    String对应存储对象数据:需要在redis中修改对象某个属性的数值(10-15)
    {“id”:1623125,"age":10,“name”:"hanlaoshi"}
    不能直接在redis中获取age将10变成15,
    从redis读出来,转化成对象,对象set属性,重新放回redis
    和hash存储对象数据
    user id 1623125
          age 10
         name hanlaoshi
        
    Hincreby user name 5



    List链表数据结构
    list01--{“200”,"300","400"}
    查看链表list和设置链表数据Lpush(左表示上,右表示下)
    lpush key value [vlaues]:对于一个链表,从左(上)开始插入数据;

    lrange key 起始下标 结束下标(展示范围,结束下标是-1表示到尾部)
    127.0.0.1:6379> lpush mylist01 100 200 300
    (integer) 3
    127.0.0.1:6379> lrange mylist 0 1
    (empty list or set)
    127.0.0.1:6379> lrange mylist01 0 1
    1) "300"
    2) "200"
    127.0.0.1:6379>

    Rpush key value:从下向上插入数据
    127.0.0.1:6379> rpush mylist01 400
    (integer) 4
    127.0.0.1:6379> lrange mylist01 0 -1
    1) "300"
    2) "200"
    3) "100"
    4) "400"
    127.0.0.1:6379>

    Linsert:从链表中间操作数据,从左侧找到第一个相同元素插入数据(before after)
    linsert mylist01 before 100 one
    在mylist01链表中,找到100这个元素,从前插入数据one 300 200 one 100 400
    127.0.0.1:6379> linsert mylist01 before 100 one
    (integer) 5
    127.0.0.1:6379> lrange mylist01 0 -1
    1) "300"
    2) "200"
    3) "one"
    4) "100"
    5) "400"
    127.0.0.1:6379> lpush mylist01 100
    (integer) 6
    127.0.0.1:6379> lrange mylist01 0 -1
    1) "100"
    2) "300"
    3) "200"
    4) "one"
    5) "100"
    6) "400"
    127.0.0.1:6379> linsert mylist01 after 100 two
    (integer) 7
    127.0.0.1:6379> lrange mylist01 0 -1
    1) "100"
    2) "two"
    3) "300"
    4) "200"
    5) "one"
    6) "100"
    7) "400"
    127.0.0.1:6379>

    lset key index value将下标对应的数据修改
    127.0.0.1:6379> lset mylist01 1 2
    OK
    127.0.0.1:6379> lrange mylist01 0 -1
    1) "100"
    2) "2"
    3) "300"
    4) "200"
    5) "one"
    6) "100"
    7) "400"
    127.0.0.1:6379>

    Lrem:这个没有rrem,内部逻辑涉及到了从下往上删除
    lrem key count value:从左向右寻找count个value相同值元素删除。
    count>0从左往右删
    count=0 全删
    count<0从右往左删
    127.0.0.1:6379> lpush mylist01 200 200 200
    (integer) 9
    127.0.0.1:6379> lrange mylist01 0 -1
    1) "200"
    2) "200"
    3) "200"
    4) "2"
    5) "300"
    6) "200"
    7) "one"
    8) "100"
    9) "400"
    127.0.0.1:6379> lrem mylist01 -2 200
    (integer) 2
    127.0.0.1:6379> lrange mylist01 0 -1
    1) "200"
    2) "200"
    3) "2"
    4) "300"
    5) "one"
    6) "100"
    7) "400"
    127.0.0.1:6379> lrem mylist01 0 200
    (integer) 2
    127.0.0.1:6379>

    ltrim 保留链表的范围内的数据元素
    ltrim key 起始位置 结束位置(-1表示到尾部)
    127.0.0.1:6379> ltrim mylist01 4 6
    OK
    127.0.0.1:6379> lrange mylist01 0 -1
    1) "400"
    127.0.0.1:6379>

    两个链表的数据交互
    lpop 从list头部删除元素,返回删除结果(类似remove) 秒杀逻辑,可以利用list对象实现阻止超卖现象
    127.0.0.1:6379> lrange mylist01 0 -1
    1) "six"
    2) "five"
    3) "four"
    4) "three"
    5) "two"
    6) "one"
    7) "400"
    127.0.0.1:6379> lpop mylist01
    "six"
    127.0.0.1:6379> lrange mylist01 0 -1
    1) "five"
    2) "four"
    3) "three"
    4) "two"
    5) "one"
    6) "400"
    127.0.0.1:6379>

    rpoplpush:从第一个list的尾部删除数据,移动到第二个list的头部添加
    127.0.0.1:6379> rpoplpush mylist01 mylist02
    "400"
    127.0.0.1:6379> lrange mylist02 0 -1
    1) "400"
    2) "5"
    3) "4"
    4) "3"
    5) "2"
    6) "1"
    127.0.0.1:6379>


  • 相关阅读:
    MySQL 01-MySQL简介
    什么是数据库
    系统安装05-Xenserver 7.0安装
    系统安装04-VMware VCSA 6.5 系统安装
    poj--2516--Minimum Cost(最小费用流)
    hdoj--1533--Going Home(最小费用流)
    hdoj--5621--KK's Point(简单数学)
    hdoj--5620--KK's Steel(斐波那契数)
    nyoj--635--Oh, my goddess(dfs)
    poj--2236--棋盘问题(dfs)
  • 原文地址:https://www.cnblogs.com/nanlinghan/p/9939019.html
Copyright © 2011-2022 走看看