Redis-经常使用操做详解

Redis链接

Redis安装配置,参考上一篇博文redis

redis数据是以key-value方式存储,key永远都是string类型,value能够是String、List、Set、Sorted-Sets、Hash,链接redis服务器,默认是第一个数据库数据库

进入目录cd /usr/local/redis/bin/服务器

链接redis./redis-cli,出现127.0.0.1:6379>则链接成功app

默认有16个数据库,db0~15dom

切换数据库select index select 1 索引从0开始测试

显示全部的key键keys *,能够用tab键补全命令,补全命令为大写ui

Redis基本命令 String

  • set,设置键 set name test1spa

  • get,获取键值get nameunix

  • exist,判断键是否存在,返回1存在和0不存在exist namecode

  • append,若是键不存在则建立该键,返回键的值长度;若是键存在则追加,返回追加后值长度append name test1

    • 若是值有空格,则须要加引号append name "zhang san"

  • strlen,获取key的长度strlen name

  • EX、PX表示失效时间,单位为秒和毫秒,不能同时使用,NX表示数据库中不存在时才能设置,XX表示存在时才能设置set key value [expiration EX seconds|PX milliseconds] [NX|XX]

  • ttl查看过时剩余时间,-2表示过时

    127.0.0.1:6379> set job tester1 EX 10 NX
    OK
    127.0.0.1:6379> ttl job
    (integer) 6
    127.0.0.1:6379> ttl job
    (integer) 5
    127.0.0.1:6379> ttl job
    (integer) 4
    127.0.0.1:6379> ttl job
    (integer) 3
    127.0.0.1:6379> ttl job
    (integer) 2
    127.0.0.1:6379> ttl job
    (integer) 2
    127.0.0.1:6379> ttl job
    (integer) 1
    127.0.0.1:6379> ttl job
    (integer) -2
    127.0.0.1:6379> ttl job

    进行第二次set设置,ttl值会显示-1

    127.0.0.1:6379> set job tester1
    OK
    127.0.0.1:6379> set job tester1 EX 10 NX
    (nil)
    127.0.0.1:6379> ttl job
    (integer) -1
  • flushdb,清空数据库flushdb 查看全部key键则会显示(empty list or set)

  • incr,递增1

    127.0.0.1:6379> set age 22
    OK
    127.0.0.1:6379> incr age
    (integer) 23
    127.0.0.1:6379> get age
    "23"
  • decr,递减1

    127.0.0.1:6379> get age
    "23"
    127.0.0.1:6379> decr age
    (integer) 22
    127.0.0.1:6379> get age
    "22"
  • del,删除键,删除后还能够用incr递增、decr递减进行操做,可是基于默认值0

    127.0.0.1:6379> del age
    (integer) 1
    127.0.0.1:6379> get age
    (nil)
    127.0.0.1:6379> incr age
    (integer) 1
    127.0.0.1:6379> get age
    "1"
    127.0.0.1:6379> decr age
    (integer) 0
    127.0.0.1:6379> get age
    "0"

    下面字符串能转换为整型

    127.0.0.1:6379> set age "22"
    OK
    127.0.0.1:6379> get age
    "22"
    127.0.0.1:6379> incr age
    (integer) 23
    127.0.0.1:6379> get age
    "23"

    下面字符串不能转换为整型

    127.0.0.1:6379> set age "hello"
    OK
    127.0.0.1:6379> incr age
    (error) ERR value is not an integer or out of range
  • incrby,递增,能够设置步长

    127.0.0.1:6379> set age 20
    OK
    127.0.0.1:6379> incrby age 5
    (integer) 25
    127.0.0.1:6379> get age
    "25"

    不加步长会报错

    127.0.0.1:6379> incrby age
    (error) ERR wrong number of arguments for 'incrby' command
  • decrby,递减,能够设置步长

  • getset,获取值并设置新的值

    127.0.0.1:6379> get age
    "25"
    127.0.0.1:6379>
    127.0.0.1:6379> getset age 30
    "25"
    127.0.0.1:6379> get age
    "30"
  • setex,设置过时时间

    setex key seconds value,等同于set key value ex seconds

  • setnx,当key不存在时,才能设置,等同于set key value nx,key存在则不能设置

  • setrange,设置指定索引位置的字符,索引0开始

    从索引为6的位置开始替换 setrange key offset value

    127.0.0.1:6379> set age "hello world"
    OK
    127.0.0.1:6379> get age
    "hello world"
    127.0.0.1:6379> setrange age 6 job
    (integer) 11
    127.0.0.1:6379> get age
    "hello jobld"

    超过的长度使用0代替

    127.0.0.1:6379> setrange age 20 job
    (integer) 23
    127.0.0.1:6379> get age
    "hello jobld\x00\x00\x00\x00\x00\x00\x00\x00\x00job"
  • getrange,获取指定索引位置的字符,索引0开始getrange key start end

    获取闭合区间里的值,[1,3]

    127.0.0.1:6379> set age "hello world"
    OK
    127.0.0.1:6379> getrange age 1 3
    "ell"
  • mset,批量设置keymset key value [key value ...]

  • mget,批量获取keymget key [key ...]

    127.0.0.1:6379> mset job1 1 job2 2 job3 3
    OK
    127.0.0.1:6379> mget job1 job2 job3
    1) "1"
    2) "2"
    3) "3"
  • msetnx,批量设置key,若是key都不存在则成功返回1,如有一个存在则失败返回0

    msetnx j 1 k 2 l 3 [key

Redis基本命令 List

  • lpush,建立键及其关联的List,而后将参数values从左到右排序

  • lrange获取从位置0到位置2的元素,0 -1获取所有元素,-3 -2获取倒数第3个到第2个元素,0 0获取第一个元素

    127.0.0.1:6379> lpush age 1 2 3 4
    (integer) 4
    127.0.0.1:6379> lrange age 0 2
    1) "4"
    2) "3"
    3) "2"
    127.0.0.1:6379> lrange age 0 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"
    127.0.0.1:6379> lrange age -3 -2
    1) "3"
    2) "2"
    127.0.0.1:6379> lrange age 0 0
    1) "4"
  • type,查看数据类型type age

  • lpushx,键存在时才能插入,不存在返回0

    127.0.0.1:6379> lpushx age123 1 2
    (integer) 0
    127.0.0.1:6379> lpushx age 1 2
    (integer) 6
    127.0.0.1:6379> lrange age 0 -1
    1) "2"
    2) "1"
    3) "4"
    4) "3"
    5) "2"
    6) "1"
  • lpop,却出链表头部的元素,至关于删除

    127.0.0.1:6379> lrange age 0 -1
    1) "1"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    127.0.0.1:6379> lpop age
    "1"
    127.0.0.1:6379> lrange age 0 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"
  • llen,返回列表长度

    127.0.0.1:6379> lrange age 0 -1
    1) "4"
    2) "3"
    3) "2"
    4) "1"
    127.0.0.1:6379> llen age
    (integer) 4
  • lrem,删除几个值等于x的元素,并返回个数

    127.0.0.1:6379> flushdb
    OK
    127.0.0.1:6379> lpush age 1 1 2 3 3 4 5
    (integer) 7
    127.0.0.1:6379> lrem age 2 1
    (integer) 2
    127.0.0.1:6379> lrange age 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "3"
    5) "2"
  • lindex,获取索引对应的值

    127.0.0.1:6379> lrange age 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "3"
    5) "2"
    127.0.0.1:6379> lindex age 1
    "4"
    127.0.0.1:6379> lindex age 0
    "5"

    索引值超过链表中元素数量,则返回nil

  • lset,修改索引对应的元素值

    127.0.0.1:6379> lrange age 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "3"
    5) "2"
    127.0.0.1:6379> lset age 0 a
    OK
    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "4"
    3) "3"
    4) "3"
    5) "2"

    设置的索引值超过链表中的元素数量,则返回error

  • ltrim,仅保留索引之间的元素,索引值俩边也被保留

    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "4"
    3) "3"
    4) "3"
    5) "2"
    127.0.0.1:6379> ltrim age 0 2
    OK
    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "4"
    3) "3"
  • linset,在具体值前面插入新元素或者后面插入新元素linsert key BEFORE|AFTER pivot value

    127.0.0.1:6379> lrange age 0 -1
    1) "c"
    2) "b"
    3) "a"
    4) "a"
    5) "4"
    6) "3"
    127.0.0.1:6379> linsert age before c d
    (integer) 7
    127.0.0.1:6379> lrange age 0 -1
    1) "d"
    2) "c"
    3) "b"
    4) "a"
    5) "a"
    6) "4"
    7) "3"
    127.0.0.1:6379> linsert age after c ff
    (integer) 8
    127.0.0.1:6379> lrange age 0 -1
    1) "d"
    2) "c"
    3) "ff"
    4) "b"
    5) "a"
    6) "a"
    7) "4"
    8) "3"
  • rpush,从链表尾部插入参数,顺序是从右到左依次插入

    127.0.0.1:6379> rpush age a b c d e
    (integer) 5
    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
  • rpushx,将元素插入链表尾部

    127.0.0.1:6379> rpushx age f
    (integer) 6
    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    6) "f"
  • rpop,从链表尾部取出元素,至关于删除

    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    6) "f"
    127.0.0.1:6379> rpop age
    "f"
    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
  • rpoplpush,将一个链表的元素最后一位取出,添加到另一个链表的头部

    127.0.0.1:6379> lrange age 0 -1
    1) "a"
    2) "b"
    3) "c"
    4) "d"
    5) "e"
    127.0.0.1:6379> lrange age1 0 -1
    1) "3"
    2) "2"
    3) "1"
    127.0.0.1:6379> rpoplpush age age1
    "e"
    127.0.0.1:6379> lrange age1 0 -1
    1) "e"
    2) "3"
    3) "2"
    4) "1"

    将source和destination设为同一键,将链表中的尾部元素移到其头部

    127.0.0.1:6379> lrange age 0 -1
    1) "d"
    2) "a"
    3) "b"
    4) "c"
    127.0.0.1:6379> rpoplpush age age
    "c"
    127.0.0.1:6379> lrange age 0 -1
    1) "c"
    2) "d"
    3) "a"
    4) "b"

Redis基本命令 Set

  • sadd,当键不存在,才能成功插入多个元素sadd age 1 2 3

    不能插入重复数据

    127.0.0.1:6379> smembers age
    1) "1"
    2) "2"
    3) "3"
    4) "123"
    127.0.0.1:6379> sadd age 1 4 5
    (integer) 2
    127.0.0.1:6379> smembers age
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    6) "123"
  • smembers,查看集合中的元素smembers age

  • sismember,判断元素是否存在,存在返回1,不存在返回0

    127.0.0.1:6379> sismember age 9
    (integer) 0
    127.0.0.1:6379> sismember age 1
    (integer) 1
  • scard,获取集合元素数量scard age

  • srandmember,随机返回一个成员,但仍是存在集合中srandmember age

  • spop,随机取出一个成员,集合中就被删除了spop age

  • srem,从集合中取出元素,只会提取存在的元素

    127.0.0.1:6379> sadd age 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> srem age 1 2 a
    (integer) 2
    127.0.0.1:6379> smembers age
    1) "3"
    2) "4"
    3) "5"
  • smove,将一个集合元素移动到另一个集合中

    127.0.0.1:6379> smembers age
    1) "3"
    2) "4"
    3) "5"
    127.0.0.1:6379> sadd age1 a b c
    (integer) 3
    127.0.0.1:6379> smembers age1
    1) "c"
    2) "a"
    3) "b"
    127.0.0.1:6379> smove age age1 3
    (integer) 1
    127.0.0.1:6379> smembers age1
    1) "3"
    2) "c"
    3) "a"
    4) "b"
  • sdiff,比较几个集合中存在差别的元素

    其中四、5是age3中没有的元素

    127.0.0.1:6379> smembers age
    1) "4"
    2) "5"
    127.0.0.1:6379> smembers age1
    1) "3"
    2) "c"
    3) "a"
    4) "b"
    127.0.0.1:6379> smembers age3
    1) "u"
    2) "i"
    127.0.0.1:6379> sdiff age age1
    1) "4"
    2) "5"
    127.0.0.1:6379> sdiff age age1 age3
    1) "4"
    2) "5"
  • sdiffstore,将三个集合的差别元素存储在destination关联的Set中,并返回插入的元素数量

    127.0.0.1:6379> sdiffstore destination age age1 age3
    (integer) 2
    127.0.0.1:6379> smembers destination
    1) "4"
    2) "5"
  • sinter,获取多个集合直接的交集sinter age age1 age3

  • sinterstore,将三个集合的交集元素存储在destination关联的Set中,并返回交集的数量sinterstore age age1 age3

  • sunion,获取多个集合之间的并集sunion age age1 age3

  • sunionstore,将三个集合的并集元素存储在destination关联的Set中,并返回并集的数量sunionstore age age1 age3

Redis基本命令 Sorted Set

也称为Zset,Redis 有序集合和集合同样也是string类型元素的集合,且不容许重复的成员,但分数(score)却能够重复,redis正是经过分数来为集合中的成员进行从小到大的排序。

  • zadd

  • 添加1个分数为10的成员zadd age 10 a

  • 添加2个分数为20,30的成员zadd age 20 b 30 c

  • zrange

  • 经过索引获取元素,0 -1表示所有元素zrange age 0 -1

  • 加WITHSCORES表示返回结果带分数zrange age 0 -1 WITHSCORES

  • zcard,获取test键中成员数量zcard age

  • zrank,获取成员在集合中的索引,从0开始zrank age a

  • zcount,获取符合条件的成员数量,分数知足10-20的成员数量zcount age 10 20

  • zrem,删除成员并返回删除的数量zrem age a b

  • zscore,获取成员的分数,返回的是字符串形式zscore age c

  • zincrby,增长或减小(-)成员的分数,返回增长后的分数zincrby age 10 c

  • zrangebyscore,经过分数获取知足条件的成员zrangebyscore age 10 20

  • ­inf表示第一个成员,+inf表示最后一个成员,limit后面的参数用于限制返回成员的数量, limit 2 2,2表示从位置索引(0­-based)等于2的成员开始,取后面2个成员,成员不足就有多少显示多少,相似于MySQL中的limit

  • zrangebyscore age -inf +inf

  • zrangebyscore age -inf +inf withscores

  • zrangebyscore age -inf +inf limit 2 2

  • zrangebyscore age -inf +inf withscores limit 2 2

  • zrangebyscore age 10 20 withscores limit 2 2

  • zremrangebyscore,根据分数条件删除成员并返回删除数量zremrangebyscore age 10 20

  • zremrangebyrank,根据索引条件删除成员zremrangebyrank age 0 1

  • zrevrange,按索引高到低获取成员

  • zrevrange age

  • 获取前10,zrevange age 0 9

  • zrevrangebyscore,根据索引从高到低根据分数获取成员

  • zrevrangebyscore age 30 10

  • zrevrank,索引由高到低的排序,获取成员在集合中的索引

  • zrevrank age a

Redis基本命令 Hash

  • hset,给键设置字段hset me name zhangsan

  • hget,获取字段hget me name

  • hlen,获取字段数量hlen me

  • hexists,判断字段是否存在,存在返回1hexists me height

  • hdel,删除字段,成功返回1,重复删除返回0hdel me name

  • hsetnx,添加新字段,并设置值hsetnx me age 22

  • hincrby,给字段的值加一、或者减-1hincrby me age 1

  • hmset,设置多个字段hmset me height 177 weight 140

  • hmget,获取多个字段hmget me height age

  • hgetall,返回全部字段及值hgetall me

  • hkeys,获取全部字段的名字hkeys me

  • hvals,获取全部字段的值hvals me

Redis基本命令 Key

  • keys * ,显示全部的键

  • del ,删除一个或多个键

    批量删除

  • exists,判断key是否存在,不存在返回0

  • move,将当前数据库的键移动到其它db1数据库

    127.0.0.1:6379> exists age
    (integer) 1
    127.0.0.1:6379> move age 1
    (integer) 1
    127.0.0.1:6379> EXISTS age
    (integer) 0
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> EXISTS age
    (integer) 1
  • rename,修改键的名称rename age newage

  • renamenx,当新名称不存在时才执行

    127.0.0.1:6379[1]> set city shanghai
    OK
    127.0.0.1:6379[1]> set newcity hangzhou
    OK
    127.0.0.1:6379[1]> renamenx city newcity
    (integer) 0
    127.0.0.1:6379[1]> get city
    "shanghai"
    127.0.0.1:6379[1]> get newcity
    "hangzhou"
  • ttl,给键设置超时时间,单位秒

    set age ex 100

    ttl age查看剩余多久

  • persist,将设置超时的键改成永久键

    persist age 100

    ttl age查看剩余时间,返回-1表明该键已经变为永久

  • expire,更新键超时时间

    expire age 200

  • expireat,unix时间戳格式设置键超时时间

    expireat age 1588918492

  • 不一样类型的测试数据,用type来查看数据类型

    127.0.0.1:6379[1]> set name katy
    OK
    127.0.0.1:6379[1]> lpush testlist a b c
    (integer) 3
    127.0.0.1:6379[1]> sadd testset 1 2 3
    (integer) 3
    127.0.0.1:6379[1]> zadd testzset 10 a 20 b
    (integer) 2
    127.0.0.1:6379[1]> hset testhash name zhangsan age 20
    (integer) 2
    127.0.0.1:6379[1]> type name
    string
    127.0.0.1:6379[1]> type testlist
    list
  • randomkey,返回任意键

  • flushdb,清空当前数据库

  • dbsize,返回当前数据库key的数量

Redis基本命令 事务

事务中若是有一条命令执行失败,其后命令仍然会被执行

  • multi,添加新事务,标记事务的开始

  • exec,执行一个事务命令队列内的全部命令

  • discard,回滚事务队命令列内的全部命令。discard只能在exec前执行

  • 执行第一条命令,但命令是存在事务命令队列的,没有当即执行

    127.0.0.1:6379[1]> incr age
    QUEUED
  • 执行第二条命令,命令也被存在事务命令队列的,没有当即执行

    127.0.0.1:6379[1]> incr age2
    QUEUED
  • 执行全部事务命令队列中全部命令

    127.0.0.1:6379[1]> exec
    1) (integer) 1
    2) (integer) 1
    127.0.0.1:6379[1]> get age
    "1"
    127.0.0.1:6379[1]> get age2
    "1"
  • 开启新事务,设置键及string类型的值

    set name zhangsan

    从键name所关联的值的头部弹出元素,因为该值是字符串类型,而lpop命令仅能用于List类型,所以在执行exec命令时,该命令将会失败

    127.0.0.1:6379[1]> lpop name
    (error) WRONGTYPE Operation against a key holding the wrong kind of value

    再次设置键name的值为字符串,获取键name的值,以便确认该值是否被事务中的第二个set命令设置成功

    127.0.0.1:6379[1]> set name lisi
    OK
    127.0.0.1:6379[1]> get name
    "lisi"

    从结果中能够看出,事务中的第二条命令lpop执行失败,而其后的set和get命令均执行成功,这一点是Redis的事务与关系型数据库中的事务之间最为重要的差异

    为键city设置一个事务执行前的值;开启一个事务;在事务内为该键设置一个新值;放弃事务;查看键city的值,从结果中能够看出该键的值仍为事务开始以前的值

    127.0.0.1:6379[1]> set name lisi
    OK
    127.0.0.1:6379[1]> get name
    "lisi"
    127.0.0.1:6379[1]> set city shanghai
    OK
    127.0.0.1:6379[1]> multi
    OK
    127.0.0.1:6379[1]> set city hangzhou
    QUEUED
    127.0.0.1:6379[1]> discard
    OK
    127.0.0.1:6379[1]> get city
    "shanghai"

    discard只能在exec前执行

    127.0.0.1:6379[1]> discard
    (error) ERR DISCARD without MULI
相关文章
相关标签/搜索