JavaWeb_redis-数据结构及通用操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq3399013670/article/details/89816063

一、数据结构

  • redis是一种高级的key-value的存储系统,其中value支持五种数据类型。
    1)字符串(String)
  1. 哈希(hash)
  2. 字符串列表(list)
    4) 字符串集合(set)
  3. 有序字符串集合(sorted set)
  • key的定义,注意几点:
    1)key不要过长,最好不超过1024个字节,这不仅会消耗内存还会降低查找效率。
    2)key不要太短,如果太短会降低key的可读性。
    3)在项目中,key最好有一个统一的命名规范。

1、存储string

字符串类型是redis最为基础的数据存储类型,在redis中是二进制安全的,这意味着该类型的存入和获取的数据相同。在Redis中字符串类型的Value最多可以容纳的数据长度是512M。

赋值

  • set key value

取值

  • get key
  • getset key value:先获取该key的值,然后在设置该key的值。

删除

  • del key

demo如下:

127.0.0.1:6379> set company itcase
OK
127.0.0.1:6379> get company
"itcase"
127.0.0.1:6379> getset company test
"itcase"
127.0.0.1:6379> get company
"test"
127.0.0.1:6379> get compnay2
(nil)
127.0.0.1:6379> set person tom
OK
127.0.0.1:6379> get persion
(nil)
127.0.0.1:6379> get person
"tom"
127.0.0.1:6379> del person
(integer) 1
127.0.0.1:6379> get person
(nil)

数值增减

  • incr key :递增1
  • decr key :递减1
  • incrby key increment :增加increment
  • decrby key increment:减少increment
  • append key value :拼凑字符串

demo如下:

127.0.0.1:6379> incr num
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> incr num 
(integer) 2
127.0.0.1:6379> incr company
(error) ERR value is not an integer or out of range
127.0.0.1:6379> decr num
(integer) 1
127.0.0.1:6379> get num
"1"
127.0.0.1:6379> decr num2
(integer) -1
127.0.0.1:6379> get num2
"-1"
127.0.0.1:6379> incrby num2 3
(integer) 2
127.0.0.1:6379> decrby num2 5
(integer) -3
127.0.0.1:6379> append num2 123
(integer) 5
127.0.0.1:6379> get num2
"-3123"

2、存储hash

redis中的hash类型可以看成具有String Key和String Value的map容器。该类型适合存储对象的信息。如username,age等。每个Hash可以存储4294967295个键值对。

赋值

  • hset key field value
  • hmset key field value [field2 value2…]:设置key中的多个filed/value

取值

  • hget key field
  • hmget key fields:获取key中的多个filed的值
  • hgetall key :获取key中的所有filed-value

删除

  • hdel key fidld [field…]
  • del key :删除整个list

增加数字

  • hincrby key fidld increment

自学命令

  • hexists key field:判断指定的key中的field是否存在
  • hlen key :获取key所包含的field的数量
  • hkeys key: 获得所有的key
  • hvals key : 所得所有的value

demo如下:

127.0.0.1:6379> hset myhash username jack
(integer) 1
127.0.0.1:6379> hmset myhash age 18 gender male
OK
127.0.0.1:6379> hget myhash username
"jack"
127.0.0.1:6379> hmget age
(error) ERR wrong number of arguments for 'hmget' command
127.0.0.1:6379> hmget myhash 
(error) ERR wrong number of arguments for 'hmget' command
127.0.0.1:6379> hmget myhash age 
1) "18"
127.0.0.1:6379> hmget myhash age gender
1) "18"
2) "male"
127.0.0.1:6379> hget myhash age
"18"
127.0.0.1:6379> hgetall myhash
1) "username"
2) "jack"
3) "age"
4) "18"
5) "gender"
6) "male"
127.0.0.1:6379> hdel myhash username age
(integer) 2
127.0.0.1:6379> hgetall myhash
1) "gender"
2) "male"
127.0.0.1:6379> del myhash
(integer) 1
127.0.0.1:6379> hgetall myhash
(empty list or set)
127.0.0.1:6379> hget myhash age
(nil)
127.0.0.1:6379> hset myhash age 19
(integer) 1
127.0.0.1:6379> hincrby myhash age 5
(integer) 24
127.0.0.1:6379> hget myhash age
"24"
127.0.0.1:6379> hexists myhash age
(integer) 1
127.0.0.1:6379> hexists myhash username
(integer) 0
127.0.0.1:6379> hlen myhash
(integer) 1
127.0.0.1:6379> hkeys myhash
1) "age"
127.0.0.1:6379> hvals myhash
1) "24"

3、存储list

在Redis中List类型是按照插入的顺序排序的字符串链表。List中可以包含的最大元素数量是4294967295。

两端添加

  • lpush key values[value1 value2…] :头部插入元素
  • rpush key values[value1 vlaue2…] :尾部插入元素

查看列表

  • lrange key start end: start,end从0开始计数,也可为负数,若为-1则表示链表尾部的元素。

两端弹出

  • lpop key :从头部弹出元素
  • rpop key:从尾部弹出元素

** 获取列表中元素的个数**

  • llen key

** 扩展命令**

  • lpushx key value :仅当参数中的key存在时,向关联的list的头部插入value。
  • rpushx key value
  • lrem key count value: 删除count个值为value的元素。如果count>0,则从头向尾遍历并删除count个值为value的元素。
  • lset key index value:设置链表中的index的脚标的元素值,0代表链表的头元素,-1代表链表的尾元素。脚标不存在则抛出异常。
  • linsert key before|after pivot value:在pivot元素的前或后插入value这个元素。
  • rpoplpush resource destination:将链表的尾部元素弹出并添加到头部。(循环操作),使用场景:用于消息队列的服务,以完成程序之间的消息交换。

demo如下:

127.0.0.1:6379> lpush mylist a b c
(integer) 3
127.0.0.1:6379> rpush mylist2 a b c d
(integer) 4
127.0.0.1:6379> lrange mylist 0 5
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> lrange mylist2 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
127.0.0.1:6379> lpop mylist
"c"
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
2) "a"
127.0.0.1:6379> rpop mylist
"a"
127.0.0.1:6379> lrange mylist 0 -1
1) "b"
127.0.0.1:6379> llen mylist2
(integer) 4
127.0.0.1:6379> lpushx mylist x
(integer) 2
127.0.0.1:6379> lpushx mylist3 x
(integer) 0
127.0.0.1:6379> rpushx mylist y
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1
1) "x"
2) "b"
3) "y"
127.0.0.1:6379> lpush mylist3 0 1 2 3 2 3 4 5 9 5
(integer) 10
127.0.0.1:6379> lrem mylist3 2 2
(integer) 2
127.0.0.1:6379> lrange mylist3 0 -1
1) "5"
2) "9"
3) "5"
4) "4"
5) "3"
6) "3"
7) "1"
8) "0"
127.0.0.1:6379> lrem mylist3 -2 3
(integer) 2
127.0.0.1:6379> lrange mylist3 0 -1
1) "5"
2) "9"
3) "5"
4) "4"
5) "1"
6) "0"
127.0.0.1:6379> lrange mylist 0 -1
1) "x"
2) "b"
3) "y"
127.0.0.1:6379> lset mylist 1 444
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "x"
2) "444"
3) "y"
127.0.0.1:6379> linsert mylist before y 123
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "x"
2) "444"
3) "123"
4) "y"
127.0.0.1:6379> lpush mylist5 1 2 3
(integer) 3
127.0.0.1:6379> lpush mylist6 a b c
(integer) 3
127.0.0.1:6379> rpoplpush mylist5 mylist6
"1"
127.0.0.1:6379> lrange mylist5 0 -1
1) "3"
2) "2"
127.0.0.1:6379> lrange mylist6 0 -1
1) "1"
2) "c"
3) "b"
4) "a"

4、存储set

Set集合中不允许出现重复的元素,无序。最大元素数量是4294967295。

添加/删除元素

  • sadd key values[value1,value2…]
  • srem key members[member1,member2…]

获得集合的元素

  • smembers key
  • sismember key member :1表示存在0表示不存在

集合的差集运算A-B

  • sdiff key1 key2 …

集合的交集运算

  • sinter key1 key2 key3…

集合的并集运算

  • sunion key1 key2 key3…

扩展命令

  • scard key:获取set中的成员数量
  • srandmember key:随机返回set中的一个成员
  • sdiffstore destionation key[key…]
  • sinterstore destionation key[key…]
  • sunionstore destionation key[key…]

demo如下:

127.0.0.1:6379> sadd myset a b c
(integer) 3
127.0.0.1:6379> sadd myset a
(integer) 0
127.0.0.1:6379> smembers myset
1) "a"
2) "c"
3) "b"
127.0.0.1:6379> srem myset a c
(integer) 2
127.0.0.1:6379> smembers myset
1) "b"
127.0.0.1:6379> sismember myset a
(integer) 0
127.0.0.1:6379> sadd mya1 a b c
(integer) 3
127.0.0.1:6379> sadd myb1 a c 1 2
(integer) 4
127.0.0.1:6379> sdiff mya1 myb1
1) "b"
127.0.0.1:6379> sinter mya1 myb1
1) "a"
2) "c"
127.0.0.1:6379> sunion mya1 myb1
1) "1"
2) "a"
3) "2"
4) "c"
5) "b"
127.0.0.1:6379> scard myset
(integer) 1
127.0.0.1:6379> srandmember mya1
"a"
127.0.0.1:6379> srandmember mya1
"a"
127.0.0.1:6379> sdiffstore y1 mya1 myb1
(integer) 1
127.0.0.1:6379> smember y1
(error) ERR unknown command 'smember'
127.0.0.1:6379> smembers y1
1) "b"

5、存储sortedset

与Set差别是SortedSet中的每一个成员都会有一个分数与之关联。Redis正是通过分数来为集合中的成员从小到大的排序。应用:游戏排名,微博热点话题等场景。

添加元素

  • zadd key score member score2 member2…

获取元素

  • zscore key member :返回指定成员的分数
  • zcard key:获取集合中的成员数量

删除元素

  • zrem key member[member…]

范围查询

  • zrange key start end[withscores]
  • zrevrange key start stop[withscores]:按照分数从大到小的顺序返回索引从start到stop之间的所有元素(包含两端的元素)
  • zremrangebyrank key start stop :按照排名范围删除元素
  • zremrangebyscore key min max:按照分数范围删除元素

扩展命名

  • zrangebyscore key min max[withscores][limit offset count]
  • zincrby key increment member:设置指定成员增加的分数。返回值是更改后的分数。
  • zcount key min max: 获取分数在[min,max]之间的成员
  • zrank key member:返回成员在集合中的排名。
  • zrevrank key member:返回成员在集合中的排名(从大到小)。

demo如下:

127.0.0.1:6379> zadd mysort 70 zhangsan 80 lisi 90 wangwu
(integer) 3
127.0.0.1:6379> zadd mysort 100 zhansan
(integer) 1
127.0.0.1:6379> zadd mysort 100 zhangsan
(integer) 0
127.0.0.1:6379> zscore mysort zhansan
"100"
127.0.0.1:6379> zcard mysort
(integer) 4
127.0.0.1:6379> zrem mysort lisi
(integer) 1
127.0.0.1:6379> zcard mysort
(integer) 3
127.0.0.1:6379> zrange mysort 0 -1
1) "wangwu"
2) "zhangsan"
3) "zhansan"
127.0.0.1:6379> zrange mysort 0 -1 withscores
1) "wangwu"
2) "90"
3) "zhangsan"
4) "100"
5) "zhansan"
6) "100"
127.0.0.1:6379> zrevrange mysort 0 -1 withscores
1) "zhansan"
2) "100"
3) "zhangsan"
4) "100"
5) "wangwu"
6) "90"

二、keys的通用操作

  • keys pattern:获取所有与pattern匹配的key,*表示多个字符,?表示任意一个字符。
  • del key1 key2… :删除指定的key
  • exists key:判断key是否存在
  • rename key newkey :为当前key重命名
  • expire key :设置过期时间,单位:秒
  • ttl key:获取该key所剩的超时时间。如果没有设置超时,返回-1,如果返回-2表示超时不存在。
  • type key :获取指定key的类型。string,list,set,hash和zset,如果key不存在返回none。

demo如下:

127.0.0.1:6379> keys *
 1) "company"
 2) "mylist"
 3) "mylist5"
 4) "mylist3"
 5) "y1"
 6) "mysort"
 7) "num"
 8) "myset"
 9) "mylist2"
10) "myhash"
11) "mylist6"
12) "myb1"
13) "num2"
14) "mya1"
127.0.0.1:6379> del company y1
(integer) 2
127.0.0.1:6379> exists my1
(integer) 0
127.0.0.1:6379> exists my11
(integer) 0
127.0.0.1:6379> exists mya1
(integer) 1
127.0.0.1:6379> rename mylist5 mylist
OK
127.0.0.1:6379> expire mylist 1000
(integer) 1
127.0.0.1:6379> ttl mylist
(integer) 996
127.0.0.1:6379> type mylist
list

猜你喜欢

转载自blog.csdn.net/qq3399013670/article/details/89816063