redis官网可查看所有命令:
https://www.redis.net.cn/order/
Redis 键(key) 命令
127.0.0.1:6379> keys * #查看所有key
(empty list or set)
127.0.0.1:6379> set name zhangsanfeng #设置key和value
OK
127.0.0.1:6379> exists name #判断当前key是否存在
(integer) 1
127.0.0.1:6379> move name 1 #将当前key移到指定库下
(integer) 1
127.0.0.1:6379> expire age 10 #设置过期时间,单位为秒
(integer) 1
127.0.0.1:6379> ttl age #查看key的剩余过期时间
(integer) 4
127.0.0.1:6379> type name #查看key属于什么类型
string
1.String(字符串)
redis字符串类型:
/**
常见字符串操作
*/
127.0.0.1:6379> set k1 v1 #设置值
OK
127.0.0.1:6379> get k1 #获得值
"v1"
127.0.0.1:6379> keys * #获得所有的key
1) "k1"
127.0.0.1:6379> exists k1 #判断一个key是否存在
(integer) 1
127.0.0.1:6379> append k1 ,hello #追加字符串,若key不存在相当于set一个key
(integer) 8
127.0.0.1:6379> strlen k1 #获取字符串的长度
(integer) 8
127.0.0.1:6379> get k1
"v1,hello"
/**
自增自减(常用于计数,如浏览量)
*/
127.0.0.1:6379> set count 0 #初始值为0
OK
127.0.0.1:6379> get count
"0"
127.0.0.1:6379> incr count #自增1
(integer) 1
127.0.0.1:6379> get count
"1"
127.0.0.1:6379> decr count #自减1
(integer) 0
127.0.0.1:6379> get count
"0"
127.0.0.1:6379> incrby count 2 #设置步长,指定自增量
(integer) 2
127.0.0.1:6379> get count
"2"
127.0.0.1:6379> decrby count 5 #设置步长,指定自减量
(integer) -3
127.0.0.1:6379> get count
"-3"
/**
字符串截取和替换
*/
127.0.0.1:6379> get k1
"v1,hello"
127.0.0.1:6379> getrange k1 3 7 #截取字符串 [3,7]
"hello"
127.0.0.1:6379> setrange k1 2 ;% #替换指定位置开始的字符串
(integer) 8
127.0.0.1:6379> get k1
"v1;%ello"
127.0.0.1:6379> getrange k1 0 -1 #获取全部位置的字符串,同get key
"v1;%ello"
/**
设置过期时间
key存在则创建失败
*/
127.0.0.1:6379> setex kt 30 time #设置kt的值为time,30秒后过期
OK
127.0.0.1:6379> get kt
"time"
127.0.0.1:6379> ttl kt #查看过期时间
(integer) 20
127.0.0.1:6379> setnx ex redis #如果ex不存在,才创建ex
(integer) 1
127.0.0.1:6379> get ex
"redis"
127.0.0.1:6379> setnx ex mysql #如果ex存在,则创建失败
(integer) 0
127.0.0.1:6379> get ex
"redis"
127.0.0.1:6379> ttl kt
(integer) -2
/**
批量设置或获取多个值
*/
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 k3 #同时获取多个值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> mset k1 v1 k4 v4
OK
127.0.0.1:6379> keys *
1) "k2"
2) "k3"
3) "k1"
4) "k4"
127.0.0.1:6379> msetnx k1 v1 k5 v5 #msetnx是原子操作,要么key都不存在才成功,要么只要存在哪怕一个key都会失败
(integer) 0
127.0.0.1:6379> keys *
1) "k2"
2) "k3"
3) "k1"
4) "k4"
# 对象
127.0.0.1:6379> set user:1 {name:zhangsan,age:21} #设置一个user:1对象 值为json字符对象
OK
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379> get user:1
"{name:zhangsan,age:21}"
127.0.0.1:6379> get user:1:name
(nil)
127.0.0.1:6379> mset user:2:name lisi user:2:age 23 #这里key可以设计为:user:{id}:{filed}
OK
127.0.0.1:6379> mget user:2:name
1) "lisi"
127.0.0.1:6379> get user:2
(nil)
127.0.0.1:6379> mget user:2:name user:2:age
1) "lisi"
2) "23"
/**
getset 先get后set
*/
127.0.0.1:6379> getset myvalue redis #如果不存在key值,则返回nil
(nil)
127.0.0.1:6379> get myvalue
"redis"
127.0.0.1:6379> getset myvalue mysql #如果存在key值,获取原来值,并设置新值
"redis"
127.0.0.1:6379> get myvalue
"mysql"
string类型的使用场景:value可以是字符串还可以是数字
- 计数器
- 统计多单位的数量
- 对象缓存存储
2.List(列表类型)
redis中的list可以当做栈或队列使用
list的命令只有push和pop才分左(lpush)右(rpush),其余命令前的l均表示list的意思,则命令均以l开头
/**
list左新增和右新增,左或右取数据
*/
127.0.0.1:6379> lpush mylist 1 #将一个或者多个值,插入到列表头部(左)
(integer) 1
127.0.0.1:6379> lpush mylist 1 2
(integer) 3
127.0.0.1:6379> lrange mylist 0 -1 #获取list中的值
1) "2"
2) "1"
3) "1"
127.0.0.1:6379> rpush mylist 3 4 #将一个或者多个值,插入到列表尾部(右)
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "2"
2) "1"
3) "1"
4) "3"
5) "4"
/**
移除列表中的值
*/
127.0.0.1:6379> lpop mylist #移除list的第一个元素
"2"
127.0.0.1:6379> lrange mylist 0 -1
1) "1"
2) "1"
3) "3"
4) "4"
127.0.0.1:6379> rpop mylist #移除list的最后一个元素
"4"
127.0.0.1:6379> lrange mylist 0 -1
1) "1"
2) "1"
3) "3"
/**
获取列表中的值
*/
127.0.0.1:6379> lrange mylist 0 -1
1) "1"
2) "1"
3) "3"
127.0.0.1:6379> lindex mylist 2 #通过下标获得list中的某一个值
"3"
127.0.0.1:6379> lindex mylist 0
"1"
/**
获取列表长度
*/
127.0.0.1:6379> lpush list 1 2 3
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> llen list #返回列表的长度
(integer) 3
/**
移除指定的值
*/
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "2"
3) "1"
127.0.0.1:6379> lrem list 1 2 #移除list集合中指定个数的值,精确匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "3"
2) "1"
/**
让列表只保留指定区间内的元素,不在区间内的元素将被删除
*/
127.0.0.1:6379> lpush list h1 h2 h3 h4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "h4"
2) "h3"
3) "h2"
4) "h1"
127.0.0.1:6379> ltrim list 1 2 #通过下标截取指定区间内的元素,原列表会被改变
OK
127.0.0.1:6379> lrange list 0 -1
1) "h3"
2) "h2"
/**
将列表中值移到新列表
*/
127.0.0.1:6379> lrange list 0 -1
1) "h3"
2) "h2"
127.0.0.1:6379> rpoplpush list listnew #将列表中最后一个元素移动到新列表
"h2"
127.0.0.1:6379> lrange list 0 -1
1) "h3"
127.0.0.1:6379> lrange listnew 0 -1
1) "h2"
/**
替换指定下标的值
*/
127.0.0.1:6379> lrange list 0 -1
(empty list or set)
127.0.0.1:6379> rpush list v1 v2 v3 v4
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379> lset list 1 hello #替换指定下标的值
OK
127.0.0.1:6379> lrange list 0 -1
1) "v1"
2) "hello"
3) "v3"
4) "v4"
127.0.0.1:6379> lset list 4 noexits #若指定下标不存在会报错
(error) ERR index out of range
/**
将值插入到某个值的前面或后面
*/
127.0.0.1:6379> lrange list 0 -1
1) "v1"
2) "hello"
3) "v3"
4) "v4"
127.0.0.1:6379> linsert list before v1 before #在v1前面插入before
(integer) 5
127.0.0.1:6379> linsert list after v4 after #在v4后面插入after
(integer) 6
127.0.0.1:6379> lrange list 0 -1
1) "before"
2) "v1"
3) "hello"
4) "v3"
5) "v4"
6) "after"
总结:
- 列表实际上是一个链表
- 如果移除了所有值,空链表,代表这个链表不存在
- 在两边插入或改动值,效率最高!操作中间元素效率相对偏低
消息队列(lpush rpop) 栈(lpush lpop)
3.set(集合)
set中的值是无序不重复的
127.0.0.1:6379> sadd myset a b c #set集合中添加值
(integer) 3
127.0.0.1:6379> smembers myset #查看指定set集合的所有值
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> sadd myset a #不能添加重复值
(integer) 0
127.0.0.1:6379> smembers myset
1) "b"
2) "a"
3) "c"
127.0.0.1:6379> sismember myset a #判断一个值在set集合中是否存在
(integer) 1
127.0.0.1:6379> sismember myset d
(integer) 0
127.0.0.1:6379> scard myset #查看集合中元素值个数
(integer) 3
127.0.0.1:6379> srem myset c #移除集合中指定元素值
(integer) 1
127.0.0.1:6379> scard myset
(integer) 2
127.0.0.1:6379> smembers myset
1) "e"
2) "d"
3) "b"
4) "a"
5) "f"
127.0.0.1:6379> srandmember myset #随机获取set集合中的一个值
"f"
127.0.0.1:6379> srandmember myset
"b"
127.0.0.1:6379> srandmember myset 2 #随机获取指定个数的值
1) "f"
2) "e"
127.0.0.1:6379> spop myset #随机删除集合中一个值
"e"
127.0.0.1:6379> smembers myset
1) "f"
2) "d"
3) "a"
4) "b"
127.0.0.1:6379> smove myset myset2 a #将集合myset中指定元素移动到另一个集合
(integer) 1
127.0.0.1:6379> smembers myset
1) "f"
2) "d"
3) "b"
127.0.0.1:6379> smembers myset2
1) "a"
127.0.0.1:6379> smembers myset2
1) "b"
2) "a"
127.0.0.1:6379> smembers myset
1) "f"
2) "d"
3) "b"
127.0.0.1:6379> sdiff myset myset2 #差集
1) "f"
2) "d"
127.0.0.1:6379> sinter myset myset2 #交集
1) "b"
127.0.0.1:6379> sunion myset myset2 #并集
1) "f"
2) "d"
3) "a"
4) "b"
4.Hash(哈希)
Map集合,存储key-value
127.0.0.1:6379> hset myhash k1 v1 #保存一个key-value
(integer) 1
127.0.0.1:6379> hget myhash k1 #获取一个key对应的value
"v1"
127.0.0.1:6379> hmset myhash k2 v2 k3 v3 #保存多个key-value
OK
127.0.0.1:6379> hmget myhash k1 k2 k3 #获取多个key对应的多个value
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> hgetall myhash #获取所有的key和value
1) "k1"
2) "v1"
3) "k2"
4) "v2"
5) "k3"
6) "v3"
127.0.0.1:6379> hdel myhash k1 #删除一个key及其value
(integer) 1
127.0.0.1:6379> hgetall myhash
1) "k2"
2) "v2"
3) "k3"
4) "v3"
127.0.0.1:6379> hlen myhash #获取集合长度
(integer) 2
127.0.0.1:6379> hlen myhash
(integer) 2
127.0.0.1:6379> hexists myhash k2 #判断集合中一个key是否存在
(integer) 1
127.0.0.1:6379> hexists myhash k1
(integer) 0
127.0.0.1:6379> hkeys myhash #获取所有的key
1) "k2"
2) "k3"
127.0.0.1:6379> hvals myhash #获取所有的value
1) "v2"
2) "v3"
127.0.0.1:6379> hset myhash k4 2
(integer) 1
127.0.0.1:6379> hincrby myhash k4 2 #将数值value加2
(integer) 4
127.0.0.1:6379> hincrby myhash k4 -1 #将数值value减1
(integer) 3
127.0.0.1:6379> hsetnx myhash k5 zhangsan #key不存在则保存,存在则保存失败
(integer) 1
127.0.0.1:6379> hsetnx myhash k5 lisi
(integer) 0
hash一般用来存储像用户信息一类的对象信息,string更适合字符串保存
5.Zset(有序集合)
在set的基础上增加了一个排序的值,set k1 v1 zset k1 score1 v1文章来源:https://www.toymoban.com/news/detail-437994.html
127.0.0.1:6379> zadd myzset 1 v1 #添加一个值
(integer) 1
127.0.0.1:6379> zadd myzset 2 v2 3 v3 #添加多个值
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1 #获取所有值
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> zrangebyscore myzset -inf +inf #显示所有值,升序排序
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> zrevrange myzset 0 -1 #显示所有值,降序排序
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> zrangebyscore myzset -inf 100 withscores #显示小于100的升序,并显示排序依据值
1) "v1"
2) "1"
3) "v2"
4) "2"
5) "v3"
6) "3"
127.0.0.1:6379> zrem myzset v1 #移除有序集合中指定元素
(integer) 1
127.0.0.1:6379> zcard myzset #获取有序集合中的个数
(integer) 2
127.0.0.1:6379> zadd myzset 4 v4 5 v5
(integer) 2
127.0.0.1:6379> zrange myzset 0 -1
1) "v2"
2) "v3"
3) "v4"
4) "v5"
127.0.0.1:6379> zcount myzset 3 4 #获取指定区间的值的个数
(integer) 2
一般用于需要排序的场景,比如排行榜文章来源地址https://www.toymoban.com/news/detail-437994.html
到了这里,关于四:redis的常见命令及5种基本数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!