关于redis基本操作,了解一下



## String类型


String 数据结构是简单的key-value类型(其中key代表此数据的名字,必须是一个string),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也清除)


ttl  key  查看key的剩余超时时间


**setrange** string range value 替换字符串


例如:>set address abcdefg


    >setrange address 2 yyyy后address的值为abyyyyefg (从第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类型


<T>


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:是否存在field,如果存在返回,不存在返回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) (feild-value)


```
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的设计非常简单精巧,即可以作为栈,又可以作为队列,满足绝大多数的需求。


List<String>


锁(对象 类 代码块):公平锁


### 常用命令


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尾部删除元素,并将被移除的元素添加到list2的头部,返回被移除的元素。


```
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 withscores
 1) "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 withscores
 1) "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 withscores
 1) "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 withscores
 1) "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 withscores
 1) "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 withscores
 1) "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:移除有序集合中给定的分数区间的所有成员
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值