redis 多条指令 一次操作_Redis基本指令&基本数据类型&操作

d5461e1d4b320ee08045b94bfb4d9c27.png

Redis基本指令


#查询当前库的所有键
keys *
#判断某个键是否存在
exists key
#查看键的类型
type key
#删除某个键
del key
#为键值设置过期时间单位秒
expire key seconds
#查看还有多少秒过期,-1表示永不过期 -2表示已过期
ttl key
#查看当前数据库key的数量
dbsize
#清空当前库
Flushdb
#通杀全部库
Flushall

#结果
127.0.0.1:6379> keys *
1) "a"
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> exists a
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> type a
string
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> del a
(integer) 1

Redis基本数据类型

String

  • String是Redis最基本的类型,一个key对应一个value

  • String类型是二进制安全的,意味着可以包含任何数据,比如jpg图片或者序列化的对象

  • 一个Redis中字符串value最多可以是512M


#添加键值对
127.0.0.1:6379> set k1 v1
OK
#查询对应键值
127.0.0.1:6379> get k1
"v1"
#讲给定的value添加到原值的末尾
127.0.0.1:6379> append k1 234
(integer) 5
#获取值的长度
127.0.0.1:6379> strlen k1
(integer) 5
#只有在key不存的时候 才会设置key的值
127.0.0.1:6379> setnx k1 asd
(integer) 0
127.0.0.1:6379> setnx k2 v2
(integer) 1

127.0.0.1:6379> set k3 12
OK
#将key对应的value值加1,只能对数字进行操作
127.0.0.1:6379> incr k3
(integer) 13
#将key对应的value值减1,只能对数字进行操作
127.0.0.1:6379> decr k3
(integer) 12
#将key对应的value值加步长,只能对数字进行操作
127.0.0.1:6379> incrby k3 10
(integer) 22
#将key对应的value值减步长,只能对数字进行操作
127.0.0.1:6379> decrby k3 5
(integer) 17

#设置一个或多个key-value
127.0.0.1:6379> mset k4 v4 k5 v5
OK
#获取一个或多个value
127.0.0.1:6379> mget k1 k2 k3
1) "v1234"
2) "v2"
3) "17"
#当且仅当所有key都不存在时设置key-value
127.0.0.1:6379> msetnx k1 v1 k6 v6
(integer) 0

#获取key对应值中范围值
127.0.0.1:6379> getrange k1 0 2
"v12"
#设置key对应value的范围值
127.0.0.1:6379> setrange k1 2 abc
(integer) 5
127.0.0.1:6379> get k1
"v1abc"

#设置键值的同时,设置过期时间,单位秒
setex key 过期时间 value
#设置新值同时获取旧值
getset key value

原子性

所谓原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束。中间不会有任何context switch(切换线程)

  • 在单线程中,能够发生在单条指令中完成的操作都可以认为是‘原子操作’。因为中断只能发生于指令之间

  • 在多线程中,不能被其他线程打断的操作就叫做原子操作

Redis单命令的原子性主要得益于Redis的单线程

List

  • 单键多值

  • Redis列表是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边)

  • 它的底层实现是个双向链表,对两端的操作性能很高,通过索引下标操作中间的节点性能会较差


#从左边/右边插入一个或多个值
127.0.0.1:6379> lpush testList a b c d e
(integer) 5
127.0.0.1:6379> rpush testList 1 2 3 4 5
(integer) 10
#从左边/右边吐出一个值,值在键在,值光键亡
127.0.0.1:6379> lpop testList
"e"
127.0.0.1:6379> rpop testList
"5"
127.0.0.1:6379> rpush testListTwo x y z
(integer) 3
#从key1列表右边吐出一个值差到key2列表的左边
127.0.0.1:6379> rpoplpush testList testListTwo
"4"

#按照索引下标获得元素(从左到右)
127.0.0.1:6379> lrange testList 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "1"
6) "2"
7) "3"

127.0.0.1:6379> lrange testListTwo 0 -1
1) "4"
2) "x"
3) "y"
4) "z"
#按照索引下标获得元素(从左到右)
127.0.0.1:6379> lindex testList -1
"3"
#获得列表长度
127.0.0.1:6379> llen testList
(integer) 7

#在value的前/后面插入新的value
127.0.0.1:6379> linsert testList before 1 xyz
(integer) 8
127.0.0.1:6379> lrange testList 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
5) "xyz"
6) "1"
7) "2"
8) "3"


127.0.0.1:6379> lpush testList 1 2 3
(integer) 11
127.0.0.1:6379> lrange testList 0 -1
1) "3"
2) "2"
3) "1"
4) "d"
5) "c"
6) "b"
7) "a"
8) "xyz"
9) "1"
10) "2"
11) "3"
#从左边删除n个value(从左到右)
127.0.0.1:6379> lrem testList 1 3
(integer) 1

127.0.0.1:6379> lrange testList 0 -1
1) "2"
2) "1"
3) "d"
4) "c"
5) "b"
6) "a"
7) "xyz"
8) "1"
9) "2"
10) "3"
#负数表示从又开始
127.0.0.1:6379> lrem testList -1 2
(integer) 1
127.0.0.1:6379> lrange testList 0 -1
1) "2"
2) "1"
3) "d"
4) "c"
5) "b"
6) "a"
7) "xyz"
8) "1"
9) "3"
#0表示删除所有
127.0.0.1:6379> lrem testList 0 1
(integer) 2
127.0.0.1:6379> lrange testList 0 -1
1) "2"
2) "d"
3) "c"
4) "b"
5) "a"
6) "xyz"
7) "3"

Set

set对外提供的功能类似list是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是个选择,并且set提供了判断某个成员是否在一个set集合内的重要接口

Redis的set是string类型的无序集合,底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)


#将一个或多个member元素加入到集合key中,已经存在于集合的member元素将被忽略
127.0.0.1:6379> sadd testSet a b c d e 1 2 3
(integer) 8
#取出该集合的所有值
127.0.0.1:6379> SMEMBERS testSet
1) "3"
2) "b"
3) "d"
4) "1"
5) "e"
6) "2"
7) "a"
8) "c"
#判断该集合是否有该value值
127.0.0.1:6379> SISMEMBER testSet x
(integer) 0
#返回该集合的元素个数
127.0.0.1:6379> scard testSet
(integer) 8
#删除集合中的某个元素
127.0.0.1:6379> srem testSet a 1
(integer) 2
#随机从该集合中弹出一个值(删除)
127.0.0.1:6379> spop testSet
"3"
#随机从集合中取出n个值(不删除)
127.0.0.1:6379> SRANDMEMBER testSet 3
1) "e"
2) "2"
3) "c"


127.0.0.1:6379> sadd testSet 1 2 3 4 5
(integer) 4
127.0.0.1:6379> sadd testSet2 a b c d e x y z
(integer) 8
#返回两个集合的交集元素
127.0.0.1:6379> sinter testSet testSet2
1) "b"
2) "d"
3) "e"
4) "c"
#返回两个集合的并集元素
127.0.0.1:6379> sunion testSet testSet2
1) "3"
2) "x"
3) "b"
4) "d"
5) "5"
6) "e"
7) "z"
8) "2"
9) "c"
10) "y"
11) "4"
12) "1"
13) "a"
#返回两个集合的差集元素(顺序有关)
127.0.0.1:6379> sdiff testSet testSet2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

hash

  • Redis hash是一个键值对集合

  • 是一个string类型的field和value的映射表。hash特别适合存储对象

  • 类似java里面的Map


#添加
127.0.0.1:6379> hset userInfo user:1010:uid 1010
(integer) 1
#添加多个
127.0.0.1:6379> hmset userInfo user:1010:username admin user:1010:password 123456
OK
#获取
127.0.0.1:6379> hget userInfo user:1010:username
"admin"
#查询是否存在
127.0.0.1:6379> hexists userInfo user:1010:uid
(integer) 1
#列出所有的field
127.0.0.1:6379> hkeys userInfo
1) "user:1010:uid"
2) "user:1010:username"
3) "user:1010:password"
#列出所有值
127.0.0.1:6379> hvals userInfo
1) "1010"
2) "admin"
3) "123456"
#列出所有键值对
127.0.0.1:6379> hgetall userInfo
1) "user:1010:1010"
2) "1010"
3) "user:1010:username"
4) "admin"
5) "user:1010:password"
6) "123456"
127.0.0.1:6379> hset userInfo user:1010:age 25
(integer) 1
#加步长
127.0.0.1:6379> hincrby userInfo user:1010:age 10
(integer) 35
#没有则设置
127.0.0.1:6379> hsetnx userInfo user:1010:sex 1
(integer) 1
#显示中文
redis-cli --raw

zset

Redis有序集合zset(sorted set)与普通集合set非常相似,是一个没有重复元素的字符串集合,不同之处是有序集合的每个成员都关联了一个评分(score),这个评分被用来按照从最低分到最高分的方式排序集合中的成员,集合的成员是唯一的,但是评分可以是重复的

因为元素是有序的,所以你可以很快的根据评分或者次序(position)来获取一个范围的元素,访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表


#添加一个或多个 分数 元素
127.0.0.1:6379> zadd testzSet 100 a 20 b 1 x 500 abc
(integer) 4
#获取元素
127.0.0.1:6379> zrange testzSet 0 -1
1) "x"
2) "b"
3) "a"
4) "abc"
#如果元素存在 则覆盖score
127.0.0.1:6379> zadd testzSet 1000 x
(integer) 0
127.0.0.1:6379> zrange testzSet 0 -1
1) "b"
2) "a"
3) "abc"
4) "x"
#不同元素相同score可以添加
127.0.0.1:6379> zrange testzSet 0 -1
1) "b"
2) "a"
3) "abc"
4) "x"
5) "xyz"
#取出分数范围元素
127.0.0.1:6379> zrangebyscore testzSet 1 200
1) "b"
2) "a"
#取出元素排序
127.0.0.1:6379> zrevrangebyscore testzSet 1 500
#为元素的score加上增量
zincrby key incerment value
#删除该集合下指定值的元素
zrem key value
#统计该集合,分数区间的元素个数
zcount key min max
#返回该值在集合中的排名
zrank key value
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值