Redis数据存储操作命令
- 查看Redis中的key
keys *
获取数据
get 数据名(key)
<br />示例:
```shell
127.0.0.1:6379> set java lanague
OK
127.0.0.1:6379> get java
"lanague"
127.0.0.1:6379>
清除所有数据库数据
flushall
进入指定数据库
select 数据库下标
<br />示例:
```shell
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> SELECT 15
OK
查看剩余有效时间,返回值为-2时,表示键被删除
ttl 数据名(key)
取消时长设置, key 存在但没有设置剩余生存时间时,返回 -1
persist 数据名(key)
<br />示例:
```shell
127.0.0.1:6379> set bomb tnt
OK
127.0.0.1:6379> expire bomb 10
(integer) 1
127.0.0.1:6379> ttl bomb
(integer) 5
127.0.0.1:6379> persist bomb
(integer) 1
127.0.0.1:6379> ttl bomb
(integer) -1
数据类型
Reids中基础数据结构包含字符串、散列,列表,集合,有序集合。工作中具体使用哪种类型要结合具体场景。
String类型
字符串类型是redis中最简单的数据类型,它存储的值可以是字符串,其最大字符串长度支持到512M。基于此类型,可以实现博客的字数统计,将日志不断追加到指定key,实现一个分布式自增id,实现一个博客的的点赞操作等
incr/incrby
当存储的字符串是整数时,redis提供了一个实用的命令INCR,其作用是让当前键值递增,并返回递增后的值。如果num不存在,则自动会创建,如果存在自动+1。
#语法格式
incr 数据名(key)
#示例
127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> incr num
(integer) 3
指定增长系数
#命令格式
incrby key 系数
#示例
127.0.0.1:6379> incrby num 2
(integer) 5
127.0.0.1:6379> incrby num 2
(integer) 7
127.0.0.1:6379> incrby num 2
(integer) 9
decr/decrby
与incr相反,decr与decrby实现数据自减
#命令格式
decr key
decrby key 系数
#示例
127.0.0.1:6379> incr num
(integer) 10
127.0.0.1:6379> decr num
(integer) 9
127.0.0.1:6379> decrby num 3
append
append用于向尾部追加值,若键不存在会自动创建,其值为value,即相当于SET key value。返回值是追加后字符串的总长度。
#命令格式
append key value
#示例
127.0.0.1:6379> get test
"123"
127.0.0.1:6379> append test "abc"
(integer) 6
127.0.0.1:6379> get test
"123abc"
mget/mset
获取和设置多个键值
#语法格式
mget key1 key2 key3...
mset key1 value1 key2 value2....
#示例
127.0.0.1:6379> keys *
1) "sname"
2) "id"
3) "name"
4) "num"
127.0.0.1:6379> mget num name
1) "1"
2) "123abc"
127.0.0.1:6379> mset id 100 sname 123
OK
127.0.0.1:6379> mget id sname
1) "100"
2) "123"
strlen
strlen可以获取字符串长度,并返回数据长度,若键不存在返回0,如果键值为空串,返回也是0.
#语法格式
strlen key
#示例
127.0.0.1:6379> get test
"123abc"
127.0.0.1:6379> strlen test
(integer) 6
127.0.0.1:6379> strlen tnt
(integer) 0
127.0.0.1:6379> set tnt ""
OK
127.0.0.1:6379> strlen tnt
(integer) 0
Hash类型
Hash类型即为散列类型,Redis散列类型相当于Java中的HashMap,实现原理跟HashMap一致,一般用于存储对象信息,存储了字段(field)和字段值的映射,一个散列类型可以包含最多232-1个字段。
hget/hset
HSET和HGET赋值和取值,HSET命令不区分插入和更新操作,当执行插入操作时HSET命令返回1,当执行更新操作时返回0。
#命令格式
HSET key field value......
HGET key field......
HGETALL key
#示例
127.0.0.1:6379> HSET user id 100 name mazhao
(integer) 2
127.0.0.1:6379> HGET user id
"100"
127.0.0.1:6379> HGET user name
"mazhao"
127.0.0.1:6379> HGETall user
1) "id"
2) "100"
3) "name"
4) "mazhao"
hincrby
自增操作
#命令格式
#示例
hincrby article total -1
hmset/hmget
hmset和hmget可以设置对象的多个值和获取获取多个值
#命令格式
hmset key failed value failed value ....
hmget key failed failed ....
#示例:
127.0.0.1:6379> hmset person username tony age 18
OK
127.0.0.1:6379> hmget person age username
1) "18"
2) "tony"
127.0.0.1:6379> hgetall person
1) "username"
2) "tony"
3) "age"
4) "18"
hexists
判断属性是否存在
#命令格式
hexists key failed
#示例:
127.0.0.1:6379> hexists user username
(integer) 1
127.0.0.1:6379> hexists person age
(integer) 1
hdel
删除属性
#命令格式
hdel key failed
#示例
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hgetall user
1) "username"
2) "chen"
127.0.0.1:6379> hgetall person
1) "username"
2) "tony"
3) "age"
4) "18"
hkeys/hvals
只获取字段名key或者字段值value
#命令格式
hkeys key
hvals key
#示例
127.0.0.1:6379> hkeys person
1) "username"
2) "age"
127.0.0.1:6379> hvals person
1) "tony"
2) "18"
List类型
Redis的list类型相当于java中的LinkedList,其原理就就是一个双向链表。支持正向、反向查找和遍历等操作,插入删除速度比较快。经常用于实现热销榜,最新评论等的设计。
ipush
ipush在key对应的list的头部添加字符串元素
#命令格式
lpush key value
#示例
127.0.0.1:6379> LPUSH str "world"
(integer) 1
127.0.0.1:6379> LRANGE str 0 -1
1) "world"
127.0.0.1:6379> LPUSH str "hello"
(integer) 2
127.0.0.1:6379> LRANGE str 0 -1
1) "hello"
2) "world"
其中Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推
rpush
rpush可以在key对应的list的尾部添加字符串元素
#命令格式
rpush key value
#示例
127.0.0.1:6379> rpush name abc
(integer) 1
127.0.0.1:6379> lrange name 0 -1
1) "abc"
127.0.0.1:6379> rpush name def
(integer) 2
127.0.0.1:6379> lrange name 0 -1
1) "abc"
2) "def"
del
删除指定key
#命令格式
del key
#示例:
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> lrange name 0 -1
(empty array)
insert
在key对应list指定value之前或之后添加字符串元素
#命令格式
linsert key before value value
linsert key after value value
#示例
127.0.0.1:6379> LRANGE name 0 -1
1) "abc"
2) "def"
127.0.0.1:6379> linsert name before def 123
(integer) 3
127.0.0.1:6379> linsert name after def 456
(integer) 4
127.0.0.1:6379> LRANGE name 0 -1
1) "abc"
2) "123"
3) "def"
4) "456"
lset
设置list中指定下标的元素值,用于修改操作
#命令格式
lset key 下标 value
#示例:
127.0.0.1:6379> LRANGE name 0 -1
1) "123"
2) "456"
3) "789"
127.0.0.1:6379> lset name 0 111
OK
127.0.0.1:6379> LRANGE name 0 -1
1) "111"
2) "456"
3) "789"
lrem
从key对应list中删除指定数量的和value相同的元素,count>0时,按从头到尾的顺序删除
#命令格式
lrem key 指定数量 value
#示例
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist5 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist5 2 "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "foo"
2) "hello"
redis 127.0.0.1:6379>
count<0时,按从尾到头的顺序删除
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist6 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist6 -2 "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
count=0时,删除全部
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist7 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist7 0 "hello"
(integer) 3
redis 127.0.0.1:6379> lrange mylist7 0 -1
1) "foo"
ltrim
保留指定key 的值范围内的数据
#命令格式
ltrim key 起始位置 结束位置
#示例
redis 127.0.0.1:6379> rpush mylist8 "one"
(integer) 1
redis 127.0.0.1:6379> rpush mylist8 "two"
(integer) 2
redis 127.0.0.1:6379> rpush mylist8 "three"
(integer) 3
redis 127.0.0.1:6379> rpush mylist8 "four"
(integer) 4
redis 127.0.0.1:6379> ltrim mylist8 1 -1
OK
redis 127.0.0.1:6379> lrange mylist8 0 -1
1) "two"
2) "three"
3) "four"
lpop
从list的头部删除元素,并返回删除元素
#命令格式
lpop key
#示例
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> lpop mylist
"hello"
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "world"
rpop
从list的尾部删除元素,并返回删除元素
#命令格式
rpop key
#示例
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> rpop mylist2
"world"
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "hello"
llen
返回key对应list的长度
#命令格式
llen key
#示例
redis 127.0.0.1:6379> llen mylist5
(integer) 2
lindex
返回名称为key的list中index位置的元素:
#命令格式
lindex key 起始位置 结束位置
#示例
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
redis 127.0.0.1:6379> lindex mylist5 0
"three"
redis 127.0.0.1:6379> lindex mylist5 1
"foo"
rpoplpush
从第一个list的尾部移除元素并添加到第二个list的头部,最后返回被移除的元素值,整个操作是原子的.如果第一个list是空或者不存在返回nil:
#命令格式
rpoplpush key1 key2
#示例:
127.0.0.1:6379> LRANGE name 0 -1
1) "111"
2) "456"
3) "789"
127.0.0.1:6379> LRANGE age 0 -1
1) "aaa"
2) "bbb"
127.0.0.1:6379> RPOPLPUSH name age
"789"
127.0.0.1:6379> LRANGE age 0 -1
1) "789"
2) "aaa"
3) "bbb"
127.0.0.1:6379> LRANGE name 0 -1
1) "111"
2) "456"
Set类型
Redis的Set类似Java中的HashSet,是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
sadd
添加元素,重复元素添加失败,返回0
#命令格式
sadd key value
#示例
127.0.0.1:6379> sadd name 123
(integer) 1
127.0.0.1:6379> sadd name 456
(integer) 1
127.0.0.1:6379> sadd name 789
(integer) 1
127.0.0.1:6379> sadd name 789
(integer) 0
127.0.0.1:6379> SMEMBERS name
1) "123"
2) "456"
3) "789"
smembers
用于获取set集合内容,命令格式为:smembers key
spop
移除并返回集合中的一个随机元素
#命令格式
spop key
#示例:
127.0.0.1:6379> SMEMBERS name
1) "123"
2) "456"
3) "789"
127.0.0.1:6379> SPOP name
"456"
127.0.0.1:6379> SPOP name
"789"
127.0.0.1:6379> SMEMBERS name
1) "123"
scard
获取成员个数
#命令格式
scard key
#示例
127.0.0.1:6379> SMEMBERS name
1) "123"
127.0.0.1:6379> SCARD name
(integer) 1
smove
从一个set集合移动一个元素到另外一个集合
#命令格式
smove key1 key2 key1的value
#示例
127.0.0.1:6379> smembers internet
1) "amoeba"
2) "redis"
3) "nginx"
127.0.0.1:6379> smembers bigdata
1) "hadopp"
2) "spark"
3) "rabbitmq"
127.0.0.1:6379> smove bigdata internet rabbitmq
(integer) 1
127.0.0.1:6379> smembers internet
1) "amoeba"
2) "redis"
3) "rabbitmq"
4) "nginx"
127.0.0.1:6379> smembers bigdata
1) "hadopp"
2) "spark"
sunion
去集合并集
#命令格式
sunion key1 key2
#示例:
127.0.0.1:6379> smembers internet
1) "amoeba"
2) "redis"
3) "rabbitmq"
4) "nginx"
127.0.0.1:6379> smembers bigdata
1) "hadopp"
2) "spark"
127.0.0.1:6379> sunion internet bigdata
1) "redis"
2) "nginx"
3) "rabbitmq"
4) "amoeba"
5) "hadopp"
6) "spark"