Redis (three) data type [very detailed usage]

Redis (three) data types

String

set/get/del/append/strlen

127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k1"
127.0.0.1:6379> del k2
(integer) 1		#一般在redis中1代表执行成功,0代表执行失败
127.0.0.1:6379> keys *
1) "k1"
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> append k1 abc		#追加文件数据
(integer) 5		#返回的字段总长度
127.0.0.1:6379> get k1
"v1abc"
127.0.0.1:6379> strlen k1		#查看key的长度
(integer) 5

incr/decr/incrby/decrby: addition and subtraction operation, the operation must be a number type

  • The operation must be a number type
  • decr: means decrement, decrease
127.0.0.1:6379> set k1 1		#写入key为k1的值为1
OK
127.0.0.1:6379> incr k1			#自增加1
(integer) 2						#返回自增之后的值
127.0.0.1:6379> incr k1
(integer) 3
127.0.0.1:6379> get k1
"3"
127.0.0.1:6379> decr k1			#自减减1
(integer) 2						#返回自减之后的值
127.0.0.1:6379> decr k1
(integer) 1
127.0.0.1:6379> get k1
"1"
127.0.0.1:6379> incrby k1 3		#在原来数据基础上加3
(integer) 4						#返回增加之后的数据
127.0.0.1:6379> get k1
"4"
127.0.0.1:6379> decrby k1 2		#在原来基础上减2
(integer) 2						#返回减后的数据
127.0.0.1:6379> get k1
"2"

getrange/setrange: similar to between...and...

  • range: range
127.0.0.1:6379> set k1 abcdef
OK
127.0.0.1:6379> get k1
"abcdef"
127.0.0.1:6379> getrange k1 0 -1		#表示获取k1全部值
"abcdef"
127.0.0.1:6379> getrange k1 0 3			#表示获取k1小标0开始,到下标3的字符(包含0和3,一共返回4哥字符)
"abcd"
127.0.0.1:6379> setrange k1 1 xxx		#表示将k1从下标1开始替换为xxx的值
(integer) 6
127.0.0.1:6379> get k1
"axxxef"

setex/setnx

  • set with expir: set the life cycle while adding data

    127.0.0.1:6379> setex k1 5 v1		#添加一个key,设置他的生命周期为5秒
    OK
    127.0.0.1:6379> get k1
    "v1"
    127.0.0.1:6379> get k1
    (nil)								#已过期
    
  • set if not exist: When adding data, judge whether it already exists, and prevent the existing data from being overwritten

    127.0.0.1:6379> set k1 vi
    OK
    127.0.0.1:6379> keys *
    1) "k1"
    127.0.0.1:6379> setnx k1 xiaoxing		#在写入k1之前判断是否已经存在,防止覆盖原来数据
    (integer) 0								#添加失败
    127.0.0.1:6379> get k1
    "vi"
    

mset/mget/msetnx

m: more

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3		#可以一次写多个值
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k3"
3) "k1"
127.0.0.1:6379> mget k1 k2					#可以一次获取多个值
1) "v1"
2) "v2"
127.0.0.1:6379> msetnx k1 b1 k4 v3			#再一次插入多个值之前判断是否存在,若有一个已经存在,则后面也不执行
(integer) 0									#插入失败
127.0.0.1:6379> msetnx k4 v4 k5 v5
(integer) 1

getset: get first and then set

127.0.0.1:6379> getset k6 v6				#先get在set
(nil)
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k5"
4) "k3"
5) "k4"
6) "k6"
127.0.0.1:6379> get k6
"v6"
127.0.0.1:6379> getset k6 vv6				#获取之后改值	
"v6"
127.0.0.1:6379> get k6
"vv6"

List List

Push and pop, similar to machine gun AK47: push, press bullet, pop, shoot out bullet

  • lpush / rpush / lrange

    • l: left from left to right → add (add from top to bottom)

    • r: right Add from right to left← (add from bottom to top)

      127.0.0.1:6379> lpush list01 1 2 3 4 5		#写入数组,从左往右,从上往下
      (integer) 5
      127.0.0.1:6379> keys *
      1) "list01"
      127.0.0.1:6379> lrange list01 0 -1			#获取数组,从下标0开始,-1表示结尾
      1) "5"
      2) "4"
      3) "3"
      4) "2"
      5) "1"
      127.0.0.1:6379> rpush list02 1 2 3 4 5		#写入数组,从右往左,从下往上
      (integer) 5
      127.0.0.1:6379> lrange list02 0 -1
      1) "1"
      2) "2"
      3) "3"
      4) "4"
      5) "5"
      
  • lpop/rpop: remove the first element (upper left, lower right)

    127.0.0.1:6379> lpop list02
    "1"
    127.0.0.1:6379> lrange list02 0 -1			#从上面移除(左),一次移除一个
    1) "2"
    2) "3"
    3) "4"
    4) "5"
    127.0.0.1:6379> rpop list02
    "5"
    127.0.0.1:6379> lrange list02 0 -1			#从下面移除(右),一次移除一个
    1) "2"
    2) "3"
    3) "4"
    
  • lindex: Query elements based on subscripts (from left to right, top to bottom)

    127.0.0.1:6379> lrange list01 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    127.0.0.1:6379> lindex list01 2			#查询下标为2的,从上(左)往下(右)查
    "3"
    127.0.0.1:6379> lindex list01 1			#查询下标为1的,从上(左)往下(右)查
    "4"
    
  • llen: returns the collection length

    127.0.0.1:6379> lrange list01 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    127.0.0.1:6379> llen list01
    (integer) 5
    
  • lrem: delete n values

    127.0.0.1:6379> clear
    127.0.0.1:6379> lpush list01 1 2 2 3 3 3 4 4 4 4
    (integer) 10
    127.0.0.1:6379> lrem list01 2 3			#删除2个3,前面为个数,后面为对应value
    (integer) 2
    127.0.0.1:6379> lrange list01 0 -1
    1) "4"
    2) "4"
    3) "4"
    4) "4"
    5) "3"
    6) "2"
    7) "2"
    8) "1"
    
  • ltrim: intercept the value of the specified range, throw away everything else

    • ltrim key begindex endindex

      127.0.0.1:6379> lpush list01 1 2 3 4 5 6 7 8 9
      (integer) 9
      127.0.0.1:6379> lrange list01 0 -1
      1) "9"
      2) "8"
      3) "7"
      4) "6"
      5) "5"
      6) "4"
      7) "3"
      8) "2"
      9) "1"
      127.0.0.1:6379> ltrim list01 3 6		#截取下标3~6的值,别的全扔掉(从上往下)
      OK
      127.0.0.1:6379> lrange list01 0 -1
      1) "6"
      2) "5"
      3) "4"
      4) "3"
      
  • rpoplpush: Get an element from one collection to another collection (one out from the right, one from the left)

    127.0.0.1:6379> rpush list01 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> lrange list01 0 -1
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    127.0.0.1:6379> rpush list02 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> lrange list02 0 -1
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    127.0.0.1:6379> rpoplpush list01 list02		#将list01中值移入到list02中,右(上)出左(下)进
    "5"
    127.0.0.1:6379> lrange list01 0 -1
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    127.0.0.1:6379> lrange list02 0 -1
    1) "5"
    2) "1"
    3) "2"
    4) "3"
    5) "4"
    6) "5"
    
  • lset: change a certain value of a certain subscript

    lset key index value

    127.0.0.1:6379> lrange list02 0 -1
    1) "5"
    2) "1"
    3) "2"
    4) "3"
    5) "4"
    6) "5"
    127.0.0.1:6379> lset list02 0 x			#该表list02下标0的值为x
    OK
    127.0.0.1:6379> lrange list02 0 -1
    1) "x"
    2) "1"
    3) "2"
    4) "3"
    5) "4"
    6) "5"
    
  • linsert: Insert element (before/after an element is specified)

    linsert key before/after oldvalue newvalue

    127.0.0.1:6379> lrange list02 0 -1
    1) "x"
    2) "1"
    3) "2"
    4) "3"
    5) "4"
    6) "5"
    127.0.0.1:6379> linsert list02 before 2 java		#从左(上)边进入,在value为2之前插入java
    (integer) 7
    127.0.0.1:6379> lrange list02 0 -1
    1) "x"
    2) "1"
    3) "java"
    4) "2"
    5) "3"
    6) "4"
    7) "5"
    127.0.0.1:6379> linsert list02 after 2 redis		#从左(上)边进入,在value为2之前插入redis
    (integer) 8
    127.0.0.1:6379> lrange list02 0 -1
    1) "x"
    2) "1"
    3) "java"
    4) "2"
    5) "redis"
    6) "3"
    7) "4"
    8) "5"
    

    Performance summary: similar to adding train skins, the head and tail operation efficiency is high, and the middle operation efficiency is poor;

Set

Similar to the set characteristics in java, no duplication is allowed

  • sadd/smembers/sismember: add/view/judge whether it exists

    127.0.0.1:6379> sadd set01 1 2 2 3 3 3		#像set插入数据
    (integer) 3
    127.0.0.1:6379> smembers set01				#获取数据,set不允许有重复
    1) "1"
    2) "2"
    3) "3"
    127.0.0.1:6379> sismember set01 2			#判断2的值是否存在于set集合
    (integer) 1									#存在
    127.0.0.1:6379> sismember set01 5
    (integer) 0									#不存在
    
    • Note: 1 and 0 are not subscripts, but Booleans. 1: true exists, 2: false does not exist
  • scard: get the number of elements in the set

    127.0.0.1:6379> scard set01
    (integer) 3
    
  • srem: delete elements in the collection

    srem key value

    127.0.0.1:6379> srem set01 2
    (integer) 1
    127.0.0.1:6379> smembers set01
    1) "1"
    2) "3"
    
  • srandmember: randomly get several elements from the set

    srandmember integer (number)

    127.0.0.1:6379> sadd set01 1 2 3 4 5 6 7 8 9
    (integer) 9
    127.0.0.1:6379> smembers set01
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    6) "6"
    7) "7"
    8) "8"
    9) "9"
    127.0.0.1:6379> srandmember set01 3			#随机在set集合中获取3个元素
    1) "3"
    2) "4"
    3) "6"
    
  • spop: random pop (removed)

    127.0.0.1:6379> spop set01			#随机移除
    "3"
    127.0.0.1:6379> spop set01
    "2"
    127.0.0.1:6379> smembers set01
    1) "1"
    2) "4"
    3) "5"
    4) "6"
    5) "7"
    6) "8"
    7) "9"
    
  • smove: Move element: assign a value of key1 to key2

    127.0.0.1:6379> sadd set01 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> sadd set02 a b c d e
    (integer) 5
    127.0.0.1:6379> smove set01 set02 3			#将set01中的3移动到set02中
    (integer) 1
    127.0.0.1:6379> smembers set01
    1) "1"
    2) "2"
    3) "4"
    4) "5"
    127.0.0.1:6379> smembers set02
    1) "a"
    2) "d"
    3) "b"
    4) "e"
    5) "3"
    6) "c"
    
  • Mathematical Collection

    • Intersection: sinter

    • Union: sunion

    • Difference: sdiff

      127.0.0.1:6379> sadd set01 1 2 3 4 5
      (integer) 5
      127.0.0.1:6379> sadd set02 2 a 1 b 3
      (integer) 5
      127.0.0.1:6379> sinter set01 set02			#交集
      1) "1"
      2) "2"
      3) "3"
      127.0.0.1:6379> sunion set01 set02			#并集
      1) "b"
      2) "2"
      3) "5"
      4) "3"
      5) "4"
      6) "1"
      7) "a"
      127.0.0.1:6379> sdiff set01 set02			#差集,set01中存在,set02中不存在
      1) "4"
      2) "5"
      127.0.0.1:6379> sdiff set02 set01			#差集,set02中存在,set01中不存在
      1) "b"
      2) "a"
      

Hash

Similar to Map<String,Object> in java

KV mode remains unchanged, but V is a key-value pair

  • hset/hget/hmset/hmget/hgetall/hdel: add/get/add more/get more/get all/delete attributes

    127.0.0.1:6379> hset user id 1001		#写入K为user,V为id = 1001
    (integer) 1
    127.0.0.1:6379> hget user id			#单个获取K为user,id的值
    "1001"
    127.0.0.1:6379> hmset student id 101 name tom age 22	#成批的写入
    OK
    127.0.0.1:6379> hget student name
    "tom"
    127.0.0.1:6379> hmget student name age		#获取多个
    1) "tom"
    2) "22"
    127.0.0.1:6379> hgetall student				#获取全部
    1) "id"
    2) "101"
    3) "name"
    4) "tom"
    5) "age"
    6) "22"
    127.0.0.1:6379> hdel student age			#删除student中V为age的数据
    (integer) 1
    127.0.0.1:6379> hgetall student
    1) "id"
    2) "101"
    3) "name"
    4) "tom"
    
  • hlen: returns the number of attributes of the element

    127.0.0.1:6379> hlen student		#属性个数,里面还有name和id属性
    (integer) 2
    
  • hexists: Determine whether an element has an attribute

    127.0.0.1:6379> hexists student name		#查看是否有name属性
    (integer) 1									#有
    127.0.0.1:6379> hexists student age			#查看是否有age属性
    (integer) 0									#无
    
  • hkeys/hvals: get all the keys of the attribute/get all the values ​​of the attribute

    127.0.0.1:6379> hkeys student		#获取所有属性
    1) "id"
    2) "name"
    127.0.0.1:6379> hvals student		#获取所有属性的值
    1) "101"
    2) "tom"
    
  • hincrby/hincrbyfloat: self-increment (integer) / self-increment (decimal)

    127.0.0.1:6379> hmset student id 101 name tom age 22		
    OK
    127.0.0.1:6379> hincrby student age 2		#student中age属性的值增加2
    (integer) 24
    127.0.0.1:6379> hget student age
    "24"
    127.0.0.1:6379> hmset user id 1001 money 1000
    OK
    127.0.0.1:6379> hincrbyfloat user money 5.5		#user中money属性的值增加5.5(小数)
    "1005.5"
    127.0.0.1:6379> hget user money
    "1005.5"
    
  • hsetnx: When adding, first determine whether it exists

    127.0.0.1:6379> hsetnx student age 18		#写入前判断是否存在
    (integer) 0									#存在,写入失败
    127.0.0.1:6379> hsetnx student sex 男
    (integer) 1									#不存在,写入成功
    127.0.0.1:6379> hgetall student
    1) "id"
    2) "101"
    3) "name"
    4) "tom"
    5) "age"
    6) "24"
    7) "sex"
    8) "\xe7\x94\xb7"							#可以添加中文,但是显示编码不对,后续可使用Java转换
    

Ordered set Zset

Real demand:

Top up 10 yuan to enjoy vip1;

Charge 20 yuan to enjoy vip2;

Recharge 30 yuan to enjoy vip3;

And so on...

  • zadd/zrange (withscores): add/query

    127.0.0.1:6379> zadd zset01 10 vip1 20 vip2 30 vip3 40 vip4 50 vip5
    (integer) 5
    127.0.0.1:6379> zrange zset01 0 -1					#查询数据
    1) "vip1"
    2) "vip2"
    3) "vip3"
    4) "vip4"
    5) "vip5"
    127.0.0.1:6379> zrange zset01 0 -1 withscores 		#携带分数查询数据
     1) "vip1"
     2) "10"
     3) "vip2"
     4) "20"
     5) "vip3"
     6) "30"
     7) "vip4"
     8) "40"
     9) "vip5"
    10) "50"
    
  • zrangebyscore: fuzzy query

    • (: Does not contain

    • limit: skip several interceptions

      127.0.0.1:6379> zrangebyscore zset01 20 40		#查询分数在20到40之间的数据,包括20和40
      1) "vip2"
      2) "vip3"
      3) "vip4"
      127.0.0.1:6379> zrangebyscore zset01 20 (40		#查询分数在20到40之间的数据,包括20,但是不包括40
      1) "vip2"
      2) "vip3"
      127.0.0.1:6379> zrangebyscore zset01 (20 (40		#查询分数在20到40之间的数据,不包括20和40
      1) "vip3"
      127.0.0.1:6379> zrangebyscore zset01 10 40 limit 2 2		#查询分数在10到40之间的数据,跳过2条,显示2条
      1) "vip3"
      2) "vip4"
      
  • zrem: delete element

    127.0.0.1:6379> zrem zset01 vip5
    (integer) 1
    127.0.0.1:6379> zrange zset01 0 -1
    1) "vip1"
    2) "vip2"
    3) "vip3"
    4) "vip4"
    
  • zcard/zcount/zrank/zscore: collection length/number of elements in the range/subscript of the element/pass value score

    127.0.0.1:6379> zcard zset01				#获取集合长度
    (integer) 4
    127.0.0.1:6379> zcount zset01 20 30			#获取分数在20和30之间的元素个数,包括20和30
    (integer) 2
    127.0.0.1:6379> zrank zset01 vip3			#获取元素的下标(从上往下)
    (integer) 2
    127.0.0.1:6379> zscore zset01 vip2			#获取元素的分数
    "20"
    
  • zrevrank: Find the subscript in reverse order (from bottom to top)

    127.0.0.1:6379> zrevrank zset01 vip3		#逆序找下标(从下向上)
    (integer) 1
    
  • zrevrange: reverse order query

    127.0.0.1:6379> zrange zset01 0 -1			#顺序查询,从上往下
    1) "vip1"
    2) "vip2"
    3) "vip3"
    4) "vip4"
    127.0.0.1:6379> zrevrange zset01 0 -1		#逆序查询,从下往上查询
    1) "vip4"
    2) "vip3"
    3) "vip2"
    4) "vip1"
    
  • zrevrangebyscore: reverse range search

    127.0.0.1:6379> zrevrangebyscore zset01 30 20		#逆序分数查询30~20,分数要逆序来(注意:先写大值,后写小值)
    1) "vip3"
    2) "vip2"
    127.0.0.1:6379> zrevrangebyscore zset01 20 30		
    (empty list or set)
    

Guess you like

Origin blog.csdn.net/weixin_49741990/article/details/112754701