Redis
Redis 常见的数据类型
一、String 字符串
1.使用decrby
命令递减键的值并返回递减后的值:
localhost:6379> SET count 10
OK
localhost:6379> DECRBY count 5
(integer) 5
设置了一个键count,初始值为10。然后使用DECRBY命令递减键的值5,返回递减后的值5。
2 使用append
命令将值追加到键的末尾:
localhost:6379> APPEND mykey "world"
(integer) 5
localhost:6379> GET mykey
"hello world"
首先设置了一个键mykey,值为"hello"。然后使用APPEND命令将"value"追加到mykey的末尾,返回追加后字符串的总长度5。最后使用GET命令获取mykey的值,得到"hello world"。
3.使用strlen
命令获取字符串的长度:
localhost:6379> SET mykey "hello"
OK
localhost:6379> STRLEN mykey
(integer) 5
在这个例子中,设置了一个键mykey,值为"hello"。然后使用STRLEN命令获取mykey的值的长度,返回值为5。
4.使用getrange
命令获取指定索引范围内的子字符串:
localhost:6379> SET mykey "This is a string"
OK
localhost:6379> GETRANGE mykey 0 3
"This"
设置了一个键mykey,值为"This is a string"。然后使用GETRANGE命令获取mykey的值从索引0到3的子字符串,返回值为"This"。
5.使用setrange
命令从指定索引开始替换字符串:
localhost:6379> SET mykey "Hello World"
OK
localhost:6379> SETRANGE mykey 6 "Redis"
(integer) 11
localhost:6379> GET mykey
"Hello Redis"
首先设置了一个键mykey,值为"Hello World"。然后使用SETRANGE命令从索引6开始替换mykey的值为"Redis",返回替换后字符串的总长度11。最后使用GET命令获取mykey的值,得到"Hello Redis"。
6.使用del
命令根据键删除一个或多个元素:
localhost:6379> SET key1 "value1"
OK
localhost:6379> SET key2 "value2"
OK
localhost:6379> DEL key1 key2
(integer) 2
在这个例子中,首先设置了键key1和key2的值。然后使用DEL命令根据给定的键key1和key2删除它们,返回删除的元素数量2。
7.使用set
命令将JSON格式的字符串保存为对象:
localhost:6379> SET user:1 "{\"name\":\"zhangsan\",\"age\":3}"
OK
使用SET命令将JSON格式的字符串{"name":"zhangsan","age":3}
保存为键user:1的值。
8.使用getset
命令先获取键的值再设置新的值:
localhost:6379> SET mykey "Hello"
OK
localhost:6379> GETSET mykey "World"
"Hello"
localhost:6379> GET mykey
"World"
首先设置了一个键mykey,值为"Hello"。然后使用GETSET命令先获取mykey的值为"Hello",再将mykey的值设置为"World"。最后使用GET命令获取mykey的值,得到"World"。
二、Hash 散列表
1.使用hset
命令存储一个哈希键值对的集合:
localhost:6379> HSET user:1 name "zhangsan"
(integer) 1
使用HSET命令将键user:1的哈希表中的字段name设置为值"zhangsan"。
2.使用hget
命令获取一个哈希键的值:
localhost:6379> HGET user:1 name
"zhangsan"
使用HGET命令获取键user:1的哈希表中字段name的值。
3.使用hmset
命令存储一个或多个哈希键值对的集合:
localhost:6379> HMSET user:1 name "zhangsan" age 25 email "zhangsan@example.com"
OK
使用HMSET命令同时设置键user:1的哈希表中的字段name、age和email的值。
4.使用hmget
命令获取多个指定键的值:
localhost:6379> HMGET user:1 name age email
1) "zhangsan"
2) "25"
3) "zhangsan@example.com"
使用HMGET命令获取键user:1的哈希表中字段name、age和email的值。
5.使用hexists
命令判断哈希表中的字段名是否存在:
localhost:6379> HEXISTS user:1 name
(integer) 1
使用HEXISTS命令判断键user:1的哈希表中是否存在字段name,返回1表示存在。
6.使用hdel
命令删除一个或多个字段:
localhost:6379> HDEL user:1 email
(integer) 1
使用HDEL命令删除键user:1的哈希表中字段email,返回1表示删除成功。
7.使用hgetal
l命令获取一个哈希表的所有键值对:
localhost:6379> HGETALL user:1
1) "name"
2) "zhangsan"
3) "age"
4) "25"
使用HGETALL命令获取键user:1的哈希表中的所有字段和对应的值。
8.使用hvals
命令只返回字段值:
localhost:6379> HVALS user:1
1) "zhangsan"
2) "25"
使用HVALS命令获取键user:1的哈希表中所有字段的值。
9.使用hkeys
命令只返回字段名:
localhost:6379> HKEYS user:1
1) "name"
2) "age"
使用HKEYS命令获取键user:1的哈希表中所有字段的字段名。
10.使用hlen
命令返回键的哈希表的元素个数:
localhost:6379> HLEN user:1
(integer) 2
使用HLEN命令获取键user:1的哈希表中元素的个数,返回2表示有两个字段。
11.使用hincrby
命令指定增量字段的值:
localhost:6379> HSET user:1 score 100
(integer) 1
localhost:6379> HINCRBY user:1 score 50
(integer) 150
首先使用HSET命令设置键user:1的哈希表中字段score的值为100,然后使用HINCRBY命令增加字段score的值50,返回增量后的值150。
12.使用hsetnx
命令如果字段不存在则创建,存在则创建失败:
localhost:6379> HSETNX user:1 name "newName"
(integer) 1
localhost:6379> HSETNX user:1 name "anotherName"
(integer) 0
localhost:6379> HGET user:1 name
"newName"
首先使用HSETNX命令设置键user:1的哈希表中字段name的值为"newName",返回1表示创建成功。然后再次使用HSETNX命令尝试设置字段name的值为"anotherName",返回0表示创建失败,因为字段name已经存在。最后使用HGET命令获取字段name的值,得到"newName"。
三、List 链表
1.lpush key value
: 向链表左侧添加——头插法
localhost:6379> lpush key A
(integer) 1
localhost:6379> lpush key B
(integer) 2
localhost:6379> lpush key C D E F G
(integer) 7
localhost:6379> LRANGE key 0 -1
1) "G"
2) "F"
3) "E"
4) "D"
5) "C"
6) "B"
7) "A"
2.rpush key value
: 向链表右侧添加——尾插法
localhost:6379> RPUSH key1 1
(integer) 1
localhost:6379> RPUSH key1 1 2 3 4 5 6
(integer) 7
localhost:6379> LRANGE key1 0 -1
1) "1"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
3.lpop key
: 从左边移出一个元素,就是从最左边的那个节点剔除掉。
localhost:6379> LRANGE key 0 -1
1) "G"
2) "F"
3) "E"
4) "D"
5) "C"
6) "B"
7) "A"
localhost:6379> LPOP key
"G"
localhost:6379> LPOP key
"F"
localhost:6379> LPOP key
"E"
localhost:6379> LPOP key
"D"
localhost:6379> LPOP key
"C"
localhost:6379> LPOP key
"B"
localhost:6379> LPOP key
"A"
localhost:6379> LPOP key
(nil)
4.rpop key
: 从右边移出一个元素,就是从最右边的那个节点剔除掉。
localhost:6379> LRANGE key1 0 -1
1) "1"
2) "1"
3) "2"
4) "3"
5) "4"
6) "5"
7) "6"
localhost:6379> RPOP key1
"6"
localhost:6379> RPOP key1
"5"
localhost:6379> RPOP key1
"4"
localhost:6379> RPOP key1
"3"
localhost:6379> RPOP key1
"2"
localhost:6379> RPOP key1
"1"
localhost:6379> RPOP key1
"1"
localhost:6379> RPOP key1
(nil)
5.lrange key start end lrange
: 命令将返回索引从 start 到 stop 之间的所有元素。Redis 的列表起始索引为 0。如果是要获取全部的元素:lrange key 0 -1
6.llen key
: 返回链表中元素的个数 相当于关系型数据库中 select count(*)
localhost:6379> RPUSH wzm 1 2 3
(integer) 3
localhost:6379> LLEN wzm
(integer) 3
7.lindex key indexnumber
:lindex 命令用来返回指定索引的元素,索引从 0 开始,如果是负数表示从右边开始计算的索引,最右边元素的索引是-1。如果要将列表类型当做数组来用,lindex 命令是必不可少的。
localhost:6379> LINDEX wzm 2
"3"
localhost:6379>
8.lset key indexnumber value
: 是另一个通过索引操作列表的命令,它会将索引为 index的元素赋值为 value,原来的值会被覆盖。如果该列表不存在就会报错。所以使用这个命令之前先使用exists判断一下。
localhost:6379> LSET wzm 0 java
OK
localhost:6379> LSET wzm 99 java
(error) ERR index out of range
localhost:6379> LINDEX wzm 0
"java"
9.lrem key count value
: 移除key链表中count个元素的value值,精确匹配,如果链表中可以有多个重复的值,这里的count指的是可以删除多个相同key的值。
localhost:6379> LRANGE wzm 0 -1
1) "java"
2) "java"
3) "2"
4) "3"
localhost:6379> LREM wzm 2 java
(integer) 2
localhost:6379> LRANGE wzm 0 -1
1) "2"
2) "3"
localhost:6379>
10.ltrim list startIndex endIndex
:通过下标截取指定的长度,这个时候list已经改变了,只剩下截断的元素。
localhost:6379> LRANGE wzm666 0 -1
1) "A"
2) "B"
3) "C"
4) "D"
5) "E"
6) "F"
7) "G"
8) "H"
9) "I"
10) "J"
11) "K"
12) "L"
13) "M"
14) "M"
15) "O"
16) "P"
localhost:6379> LTRIM wzm666 2 16
OK
localhost:6379> LRANGE wzm666 0 -1
1) "C"
2) "D"
3) "E"
4) "F"
5) "G"
6) "H"
7) "I"
8) "J"
9) "K"
10) "L"
11) "M"
12) "M"
13) "O"
14) "P"
11.rpoplpush source destination
:移除当前的source链表中的最后一个元素,并且将该元素移动到destination链表当中。
localhost:6379> LRANGE wzm 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
localhost:6379> LRANGE wzm666 0 -1
1) "C"
2) "D"
3) "E"
4) "F"
5) "G"
6) "H"
7) "I"
8) "J"
9) "K"
10) "L"
11) "M"
12) "M"
13) "O"
14) "P"
localhost:6379> RPOPLPUSH wzm wzm666
"1"
localhost:6379> LRANGE wzm 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
localhost:6379> RPOPLPUSH wzm wzm666
"2"
localhost:6379> LRANGE wzm666 0 -1
1) "2"
2) "1"
3) "C"
4) "D"
5) "E"
6) "F"
7) "G"
8) "H"
9) "I"
10) "J"
11) "K"
12) "L"
13) "M"
14) "M"
15) "O"
16) "P"
12.linsert key BEFORE|AFTER pivot value
:在key列表的pivot元素的前/后面插入元素value。
localhost:6379> LRANGE m 0 -1
1) "6"
2) "6"
3) "="
4) "36"
localhost:6379> LINSERT m BEFORE "6" "*"
(integer) 5
localhost:6379> LRANGE m 0 -1
1) "*"
2) "6"
3) "6"
4) "="
5) "36"
localhost:6379>