版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq3399013670/article/details/89816063
一、数据结构
- redis是一种高级的key-value的存储系统,其中value支持五种数据类型。
1)字符串(String)
- 哈希(hash)
- 字符串列表(list)
4) 字符串集合(set) - 有序字符串集合(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