2019独角兽企业重金招聘Python工程师标准>>>
登录Redis数据库
[root@localhost bin]# /usr/local/redis/bin/redis-cli
String类型
String 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字,是包含很多种类型的特殊类型,并且是二进制安全的。比如序列化的对象进行存储,比如一张图片进行二进制存储,比如一个简单的字符串,数值等等。
常用命令
设值:set name zhangsan (说明:多次设置name会覆盖)
setnx name lisi: (not exist) 如果name不存在,则设值。如果name存在,则不设值并返回0;
setex name 10 lisi :(expired) 设置name的值为lisi,过期时间为10秒,10秒后name清除(key也清除)
setrange string range value 替换字符串
例如:>set address abcdefg
>setrange address 2 yy 后address的值为abyyefg (从第3个字符开始替换为yy,后面的由原来
的字符补齐)。
取值: get name
删值:del name
批量写:mset k1 v1 k2 v2 ...
批量读:mget k1 k2 k3
一次性设值和读取(返回旧值,写上新值):getset name lily
数值类型自增减:incr,decr,incrby,decrby
127.0.0.1:6379> set a 1 OK 127.0.0.1:6379> incr a (integer) 2 127.0.0.1:6379> incr a (integer) 3 127.0.0.1:6379> get a "3" 127.0.0.1:6379> desc a (error) ERR unknown command 'desc' 127.0.0.1:6379> decr a (integer) 2 127.0.0.1:6379> get a "2" 127.0.0.1:6379> incrby a 4 (integer) 6 127.0.0.1:6379> incrby a 2 (integer) 8 127.0.0.1:6379> decrby a 4 (integer) 4
字符串拼接:append name abc :在name=lisi原有基础上拼接为 lisiabc
字符串长度:strlen name :返回name的字符长度
Hash类型
Hash类型是String类型的field和value的映射表,或者说是一个String集合。它特别适合存储对象,相比较而言,将一个对象类型存储在Hash类型要存储在String类型里占用更少的内存空间,并方整个对象的存取。
常用命令
设值:hset hashname field value(hset是设值命令,hashname是集合名字,field是字段名,value是值)
例子:>hset user1 name zhangsan
>hset user1 age 23
取值:hget hashname field
批量设置:hmset hashname field1 value1 field2 value2 ….
例子:>hmset user2 name lisi age 22
批量取值:hmget hashname field1 field2 ...
hsetnx:和setnx大同小异
集合递增和递减:hincrby和hdecrby
127.0.0.1:6379> hgetall user1 1) "age" 2) "23" 3) "name" 4) "zhangsan" 127.0.0.1:6379> hincrby user1 age 2 (integer) 25 127.0.0.1:6379> hgetall user1 1) "age" 2) "25" 3) "name" 4) "zhangsan"
hexists:是否存在key,如果存在返回,不存在返回0
127.0.0.1:6379> hexists user1 age (integer) 1 127.0.0.1:6379> hexists user1 sex (integer) 0
删除:hdel 删除指定的hash的field
127.0.0.1:6379> hdel user1 name (integer) 1 127.0.0.1:6379> hgetall user1 1) "age" 2) "23"
hlen:返回hash集合里的所有的键数值(size)
127.0.0.1:6379> hlen user1 (integer) 2
hkeys 返回hash里所有的字段
127.0.0.1:6379> hkeys user1 1) "name" 2) "age"
hvals返回hash的所有value
127.0.0.1:6379> hvals user1 1) "zhangsan" 2) "23"
hgetall返回hash里所有的key和value
127.0.0.1:6379> hgetall user1 1) "name" 2) "zhangsan" 3) "age" 4) "23"
List类型
List类型是一个链表结构的集合,其主要功能有push、pop、获取元素等。更详细的说,List类型是一个双端链表的节后,我们可以通过相关的操作进行集合的头部或者尾部添加和删除元素,List的设计非常简单精巧,即可以作为栈,又可以作为队列,满足绝大多数的需求。
常用命令
lpush:从头部加入元素(栈,先进后出)
127.0.0.1:6379> lpush list1 hello (integer) 1 127.0.0.1:6379> lpush list1 world (integer) 2 127.0.0.1:6379> lrange list1 0 -1 1) "world" 2) "hello"
rpush:从尾部加入元素(队列,先进先出)
127.0.0.1:6379> rpush list1 java (integer) 3 127.0.0.1:6379> lrange list1 0 -1 1) "world" 2) "hello" 3) "java"
linsert:插入元素
127.0.0.1:6379> linsert list1 before hello php (integer) 4 127.0.0.1:6379> lrange list1 0 -1 1) "world" 2) "php" 3) "hello" 4) "java" 127.0.0.1:6379> linsert list1 after hello php (integer) 5 127.0.0.1:6379> lrange list1 0 -1 1) "world" 2) "php" 3) "hello" 4) "php" 5) "java"
lset:将制定下表的元素替换掉
127.0.0.1:6379> lset list1 0 k OK 127.0.0.1:6379> lrange list1 0 -1 1) "k" 2) "php" 3) "hello" 4) "php" 5) "java"
lrem:删除元素,移除n个,返回删除的个数n
127.0.0.1:6379> lrem list1 1 php (integer) 1 127.0.0.1:6379> lrange list1 0 -1 1) "k" 2) "hello" 3) "php" 4) "java" 127.0.0.1:6379> lrem list1 1 php (integer) 1 127.0.0.1:6379> lrange list1 0 -1 1) "k" 2) "hello" 3) "java"
ltrim:保留制定key的值范围内的数据
127.0.0.1:6379> rpush list2 1 (integer) 1 127.0.0.1:6379> rpush list2 2 (integer) 2 127.0.0.1:6379> rpush list2 3 (integer) 3 127.0.0.1:6379> rpush list2 4 (integer) 4 127.0.0.1:6379> lrange list2 0 -1 1) "1" 2) "2" 3) "3" 4) "4" 127.0.0.1:6379> ltrim list2 2 -1 OK 127.0.0.1:6379> lrange list2 0 -1 1) "3" 2) "4"
lpop:从list的头部删除元素,并返回删除元素。
127.0.0.1:6379> rpush list3 a (integer) 1 127.0.0.1:6379> rpush list3 b (integer) 2 127.0.0.1:6379> rpush list3 c (integer) 3 127.0.0.1:6379> rpush list3 d (integer) 4 127.0.0.1:6379> lrange list3 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 127.0.0.1:6379> lpop list3 "a" 127.0.0.1:6379> lrange list3 0 -1 1) "b" 2) "c" 3) "d"
rpop:从list的尾部删除元素,并返回删除元素
127.0.0.1:6379> rpop list3 "d" 127.0.0.1:6379> lrange list3 0 -1 1) "b" 2) "c"
可以基于List实现MQ。
rpoplpush list1 list2:从list1尾部删除元素,并将被移除的元素添加到list的头部,返回被移除的元素。
127.0.0.1:6379> lrange list2 0 -1 1) "3" 2) "4" 127.0.0.1:6379> rpoplpush list2 list4 "4" 127.0.0.1:6379> lrange list2 0 -1 1) "3" 127.0.0.1:6379> lrange list4 0 -1 1) "4" 127.0.0.1:6379> rpoplpush list2 list4 "3" 127.0.0.1:6379> lrange list2 0 -1 (empty list or set) 127.0.0.1:6379> lrange list4 0 -1 1) "3" 2) "4"
llen:返回元素个数
127.0.0.1:6379> llen list1 (integer) 3 127.0.0.1:6379> llen list3 (integer) 2
lindex:返回名称为key的list中index位置的元素
127.0.0.1:6379> lrange list3 0 -1 1) "b" 2) "c" 127.0.0.1:6379> lindex list3 0 "b" 127.0.0.1:6379> lindex list3 1 "c" 127.0.0.1:6379> lindex list3 2 (nil)
Set类型
set集合是string类型的无序集合,set是通过hashtable实现的,对集合我们可以取交集、并集、差集。
常用命令
sadd:向名称为key的set中添加元素,set集合不允许重复元素。
smembers:查看set集合中的元素。
127.0.0.1:6379> sadd set1 a (integer) 1 127.0.0.1:6379> sadd set1 b (integer) 1 127.0.0.1:6379> sadd set1 a (integer) 0 127.0.0.1:6379> smembers set1 1) "a" 2) "b"
srem:删除set集合的元素
127.0.0.1:6379> srem set1 a (integer) 1 127.0.0.1:6379> smembers set1 1) "b"
spop:随机返回删除的key
127.0.0.1:6379> sadd set1 a (integer) 1 127.0.0.1:6379> sadd set1 c (integer) 1 127.0.0.1:6379> sadd set1 d (integer) 1 127.0.0.1:6379> smembers set1 1) "a" 2) "d" 3) "c" 4) "b" 127.0.0.1:6379> spop set1 "d" 127.0.0.1:6379>
sdiff:返回两个集合的不同元素(哪个集合在前面就以哪个集合为标准)
127.0.0.1:6379> sadd set2 a (integer) 1 127.0.0.1:6379> sadd set2 b (integer) 1 127.0.0.1:6379> sadd set2 c (integer) 1 127.0.0.1:6379> sadd set3 a (integer) 1 127.0.0.1:6379> sadd set3 d (integer) 1 127.0.0.1:6379> sdiff set2 set3 1) "b" 2) "c" 127.0.0.1:6379> sdiff set3 set2 1) "d" 127.0.0.1:6379>
sdiffstore:将返回的不同元素,存储到另一个集合里
sdiffstore set4 set2 set3 将set2 set3的比较结果保存到set4中
127.0.0.1:6379> sdiff set2 set3 1) "c" 2) "b" 127.0.0.1:6379> sdiffstore set4 set2 set3 (integer) 2 127.0.0.1:6379> smembers set4 1) "c" 2) "b" 127.0.0.1:6379>
sinter:取交集
sinterstore:取交集后保存
sunion:取并集
sunionstore:取并集后保存
127.0.0.1:6379> smembers set1 1) "a" 2) "b" 3) "c" 127.0.0.1:6379> smembers set3 1) "a" 2) "d" 127.0.0.1:6379> sinter set1 set3 1) "a" 127.0.0.1:6379> sunion set1 set3 1) "a" 2) "c" 3) "b" 4) "d" 127.0.0.1:6379> sinterstore set5 set1 set3 (integer) 1 127.0.0.1:6379> sunionstore set6 set1 set3 (integer) 4 127.0.0.1:6379> smembers set5 1) "a" 127.0.0.1:6379> smembers set6 1) "a" 2) "c" 3) "b" 4) "d"
smove:从一个set集合移动到另一个set集合里
scard:查看集合里的元素个数
sismember:判断某个元素是否为集合中的元素,是,返回1。不是,返回0。
srandmember:随机返回一个元素
127.0.0.1:6379> smembers set2 1) "a" 2) "b" 3) "c" 127.0.0.1:6379> smembers set3 1) "a" 2) "d" 127.0.0.1:6379> smove set2 set3 c (integer) 1 127.0.0.1:6379> smembers set2 1) "a" 2) "b" 127.0.0.1:6379> smembers set3 1) "a" 2) "c" 3) "d" 127.0.0.1:6379> scard set2 (integer) 2 127.0.0.1:6379> scard set3 (integer) 3 127.0.0.1:6379> sismember set2 a (integer) 1 127.0.0.1:6379> sismember set2 c (integer) 0 127.0.0.1:6379> srandmember set2 "b" 127.0.0.1:6379> srandmember set2 "a" 127.0.0.1:6379> srandmember set2 "a"
Zset类型
有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
常用命令
zadd:向有序集合中添加一个元素,该元素如果存在,则更新顺序,如果分值相同元素不同,会同事存在两个元素。
zadd key score1 member1 score2 member2...
127.0.0.1:6379> zadd zset1 1 a 2 b 4 d 3 c (integer) 4 127.0.0.1:6379> zrange zset1 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "a" 2) "1" 3) "b" 4) "2" 5) "c" 6) "3" 7) "d" 8) "4" 127.0.0.1:6379> zadd zset1 1.5 x //插入1.5分的 会根据分数排序 (integer) 1 127.0.0.1:6379> zrange zset1 0 -1 withscores1) "a"2) "1"3) "x"4) "1.5"5) "b"6) "2"7) "c"8) "3"9) "d" 10) "4" 127.0.0.1:6379> zadd zset1 2 y //插入分值为2,但元素为新元素y (integer) 1 127.0.0.1:6379> zrange zset1 0 -1 withscores 1) "a"2) "1"3) "x"4) "1.5"5) "b" //两个分值为2的b和y都会存在6) "2" 7) "y" 8) "2"9) "c" 10) "3" 11) "d" 12) "4" 127.0.0.1:6379> zadd zset1 5 b //重新插入重复元素b,分值发生了变化,移除之前的元素,重新按照新的分值排序 (integer) 0 127.0.0.1:6379> zrange zset1 0 -1 withscores1) "a"2) "1"3) "x"4) "1.5"5) "y"6) "2"7) "c"8) "3"9) "d" 10) "4" 11) "b" 12) "5"
zrem :删除zset名称key中的member元素
zrem zset member
127.0.0.1:6379> zrange zset1 0 -1 withscores1) "a"2) "1"3) "x"4) "1.5"5) "y"6) "2"7) "c"8) "3"9) "d" 10) "4" 11) "b" 12) "5" 127.0.0.1:6379> zrem zset1 a (integer) 1 127.0.0.1:6379> zrange zset1 0 -1 withscores1) "x"2) "1.5"3) "y"4) "2"5) "c"6) "3"7) "d"8) "4"9) "b" 10) "5"
zrank 返回有序集合中指定成员的索引(从小到大排序)
zrevrank 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
127.0.0.1:6379> zrange zset1 0 -1 withscores1) "x"2) "1.5"3) "y"4) "2"5) "c"6) "3"7) "d"8) "4"9) "b" 10) "5" 127.0.0.1:6379> zrank zset1 d (integer) 3 //第4个位置 127.0.0.1:6379> zrevrank zset1 d (integer) 1 //第2个位置
zcard 返回集合里所有元素的个数
zcount 返回集合中score在给定区间中的数量
127.0.0.1:6379> zrange zset1 0 -1 withscores1) "x"2) "1.5"3) "y"4) "2"5) "c"6) "3"7) "d"8) "4"9) "b" 10) "5" 127.0.0.1:6379> zcard zset1 (integer) 5 127.0.0.1:6379> zcount zset1 1 3 (integer) 3
zincrby key increment member: 有序集合中对指定成员的分数加上增量 increment
zrangebyscore key min max [WITHSCORES] [LIMIT] :通过分数返回有序集合指定区间内的成员
zremrangebyrank key start stop :移除有序集合中给定的排名区间的所有成员
zremrangebyscore key min max:移除有序集合中给定的分数区间的所有成员