redis基本数据类型及命令

启动

redis启动命令

后台启动:
修改配置文件 redis.conf,将daemonize改为yes
在这里插入图片描述

客户端连接

./src/redis-cli -h 127.0.0.1 -p 6379
-h 服务器地址
-p 连接端口(默认6379)
-a 连接密码
在这里插入图片描述

基本数据类型,
string,list,hash,set,zset

一、String 类型

存储string,int,float类型,编码方式不同。
1-成功执行会清除原有的TTL;
2-可以附带参数:

 1-EX seconds : 将键的过期时间设置为 seconds 秒。
   SET key value EX  seconds = SETEXkey seconds value 。 
 2-PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 
   SET key value PX milliseconds = PSETEX key milliseconds value 。 
 3-NX :只在键不存在时, 才对键进行设置操作。  
   SET key value NX = SETNX key value 。 
 4-XX :只在键已经存在时, 才对键进行设置操作。
127.0.0.1:16379> get user:03
"8"
127.0.0.1:16379> INCR user:03  //递增1
(integer) 9
127.0.0.1:16379> INCRBY user:03 5  //递增5
(integer) 14
127.0.0.1:16379> 

二、List类型

特点:有序、可重复。
最多2^32 -1个。可以用作队列和栈。

lpushlpush key v1 v2…从左侧插入
lpoplpop key count从左侧弹出(数量)
rpushrpush key v1 v2…右侧插入
rpoprpop key count右侧弹出
lrangelrange start end返回列表中指定区间元素,全部则end为 -1
lpushxlpushx key v插入头部
rpushxrpushx key v插入到尾部
llenllen key获取元素个数
lindexlindex key positon通过索引下标获取元素
lremlrem key count value删除元素,count=0,删除全部,count>0,头部开始;count<0,尾部开始基数,count为删除元素个数
linsertlinsert key before/after povit v指定元素前/后插入元素
lsetlset key index value通过索引给元素赋值
127.0.0.1:16379> lrange names 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:16379> linsert names before a v //在元素a前插入元素v
(integer) 4
127.0.0.1:16379> lrange names 0 -1
1) "a"
2) "v"
3) "b"
4) "c"
127.0.0.1:16379> lset names 2 aa  //为指定索引赋值
OK
127.0.0.1:16379> lrange names 0 -1
1) "a"
2) "v"
3) "aa"
4) "c"
127.0.0.1:16379>

三、Set类型

特点:有序、唯一。

saddsadd key m1 m2…为集合添加元素
smemberssmembers key获取集合所有元素
sremsrem key m1 m2删除集合中元素
spopspop key count返回集合中随数量元素,并删除
srandmembersrandmember key count返回集合中随数量元素,不删除
sismembersismember key m判断元素是在集合中
scardscard key获取集合中元素数量
sintersinter key1 key2 …求多个集合交集
sdiffsdiff key1 key2…求多个集合交集
sunionsunion key1 key2…多个集合并集
smovesmove key1 key2 m1将key1中m1移到key2中
127.0.0.1:16379> sadd myset s1 s2 s3 s4
(integer) 4
127.0.0.1:16379> SMEMBERS myset 
1) "s2"
2) "s4"
3) "s3"
4) "s1"
127.0.0.1:16379> SISMEMBER myset s4
(integer) 1
127.0.0.1:16379> srem myset s1 s2
(integer) 2
127.0.0.1:16379> SMEMBERS myset
1) "s4"
2) "s3"
127.0.0.1:16379> scard myset
(integer) 2
127.0.0.1:16379> sadd myset s5 s6 s7
(integer) 3
127.0.0.1:16379> SMEMBERS myset
1) "s5"
2) "s4"
3) "s6"
4) "s3"
5) "s7"
127.0.0.1:16379> spop myset 1
1) "s6"
127.0.0.1:16379> SMEMBERS myset
1) "s7"
2) "s5"
3) "s3"
4) "s4"
127.0.0.1:16379> SRANDMEMBER myset 1
1) "s7"
127.0.0.1:16379> SMEMBERS myset
1) "s7"
2) "s5"
3) "s3"
4) "s4"
127.0.0.1:16379> sadd myset2 s3 s4 s9 s8
(integer) 4
127.0.0.1:16379> SMEMBERS myset2
1) "s8"
2) "s9"
3) "s4"
4) "s3"
127.0.0.1:16379> SINTER myset myset2
1) "s3"
2) "s4"
127.0.0.1:16379> sdiff myset myset2
1) "s7"
2) "s5"
127.0.0.1:16379> SUNION myset myset2
1) "s7"
2) "s5"
3) "s9"
4) "s8"
5) "s3"
6) "s4"
127.0.0.1:16379> 

四、Sorted Set(Zset)类型

特点:有序,

zaddzadd key score1 member1 score2 member2 …添加成员
zremzrem key m1 m2 …删除成员
zrangezrange key start end (WITHSCORES)获取指定区间成员,分递增
zrevrangezrevrange key start end获取指定区间成员,分数递减
zcardzcard key获取元素数量
zcountzcount key min max返回分值在 [min,max]区间元素
zscorezscore key member获取元素分数
zrankzrank key member获取元素排名 ,从小到大
zrevrankzrevrank key member获取元素排名 ,从大到小
zincbyzincrby key increament member在元素分值上增加
127.0.0.1:16379> zadd myzset 12 z1 14 z2 15 z3 13 z4 16 z5
(integer) 5
127.0.0.1:16379> zrange myzset 0 -1 withscores
 1) "z1"
 2) "12"
 3) "z4"
 4) "13"
 5) "z2"
 6) "14"
 7) "z3"
 8) "15"
 9) "z5"
10) "16"
127.0.0.1:16379> zrevrange myzset 0 3 
1) "z5"
2) "z3"
3) "z2"
4) "z4"
127.0.0.1:16379> zcard myzset
(integer) 5
127.0.0.1:16379> zcount myzset 10 14
(integer) 3
127.0.0.1:16379> zscore myzset z3
"15"
127.0.0.1:16379> zrank myzset z4
(integer) 1
127.0.0.1:16379> zrank myzset z1
(integer) 0
127.0.0.1:16379> zrevrank myzset z4
(integer) 3
127.0.0.1:16379> zincrby myzset 10 z2
"24"
127.0.0.1:16379> 

五、Hash类型

hsethset key field value单个赋值
hmsethmset key fild1 value1 field2 value2批量赋值
hgetallhgetall key获取所有字段和值
hgethget key field获取一个字段值
hmgethmget key field1 field批量获取字段值
hexistshexists key field判断字段是否存在
hlenhlen key获取字段数量
hincrbyhincrby key field increment指定字段增加数值
hsetnxhsetnx key field value赋值,field存在则不操作
hdelhdel key field1 field2删除字段
127.0.0.1:16379> hset user name qu 
(integer) 1
127.0.0.1:16379> hmset user age 21 sex male
OK
127.0.0.1:16379> hgetall user
1) "name"
2) "qu"
3) "age"
4) "21"
5) "sex"
6) "male"
127.0.0.1:16379> hget user age
"21"
127.0.0.1:16379> hmget user age name
1) "21"
2) "qu"
127.0.0.1:16379> hexists user country
(integer) 0
127.0.0.1:16379> hlen user
(integer) 3
127.0.0.1:16379> hincrby user age 10
(integer) 31
127.0.0.1:16379> hsetnx user name qu
(integer) 0
127.0.0.1:16379> hsetnx user  work student
(integer) 1
127.0.0.1:16379> hgetall user
1) "name"
2) "qu"
3) "age"
4) "31"
5) "sex"
6) "male"
7) "work"
8) "student"
127.0.0.1:16379> hdel user name
(integer) 1
127.0.0.1:16379> hgetall user
1) "age"
2) "31"
3) "sex"
4) "male"
5) "work"
6) "student"
127.0.0.1:16379> 

六、bitmap位类型

特点:进行位操作。节省空间
值为0或1
应用:签到

setbitsetbit key offset value赋值
getbitgetbit key offset取值
bitcountbitcount key获取值为1的个数
bitposbitpos key value返回第一个设置bit的索引值
127.0.0.1:16379> setbit user1 1201 1
(integer) 0
127.0.0.1:16379> getbit user1 1201
(integer) 1
127.0.0.1:16379> setbit user1 1202 0
(integer) 0
127.0.0.1:16379> bitcount user1
(integer) 1
127.0.0.1:16379> bitpos user1 1
(integer) 1201

七、Geo地理位置类型

原理:将经纬度添加到key中,这些数据会存储到Zset方便查询。经纬度转分值原理是Z阶函数。
应用:附近的人,计算距离

geoaddgeoadd key 经度1 纬度1 成员1 经度2 成员2…添加地理坐标
geohashgeohash 成员1 成员2 …查看成员geohash
geoposgeopos key 成员1 成员2…返回成员经纬度
geodistgeodist key 成员1 成员2 单位计成员之间距离
georadiusgeoradius 经度 纬度 距离 单位以给经纬度为中心,找到某一半径内成员
georadiusbymembergeoradiusbymember key 成员 距离 单位以某成员位置为中心,找某半径内成员

georadius/georadiusbymember参数

withdist同时返回距离
withcoord同时返回经纬度
withhash同时返回geohash值
asc由近到远排序
desc由远到近排序
count返回数量
127.0.0.1:16379> geoadd useraddr 116.2 40.2 user1 114.4 36.6 user2 114.0 30.5 user3 113.2 23.1 user4
(integer) 4
127.0.0.1:16379> geohash useraddr  user1 user2
1) "wx4ssnnmbp0"
2) "ww925nzd3n0"
127.0.0.1:16379> geopos useraddr user1 user2 m
1) 1) "116.19999736547470093"
   2) "40.19999954920563567"
2) 1) "114.39999908208847046"
   2) "36.60000098934667534"
3) (nil)
127.0.0.1:16379> geopos useraddr user1 user2 
1) 1) "116.19999736547470093"
   2) "40.19999954920563567"
2) 1) "114.39999908208847046"
   2) "36.60000098934667534"
127.0.0.1:16379> geodist useraddr user1 user2 m
"430029.7344"
127.0.0.1:16379> geodist useraddr user1 user2 km
"430.0297"
127.0.0.1:16379> GEORADIUS useraddr 117.3 39.7 500 km withdist
1) 1) "user1"
   2) "109.0402"
2) 1) "user2"
   2) "427.9953"
127.0.0.1:16379> GEORADIUSBYMEMBER useraddr  user3 1000 km withdist
1) 1) "user4"
   2) "826.8883"
2) 1) "user3"
   2) "0.0000"
3) 1) "user2"
   2) "679.4908"
127.0.0.1:16379> GEORADIUSBYMEMBER useraddr  user3 1000 km withdist count 2
1) 1) "user3"
   2) "0.0000"
2) 1) "user2"
   2) "679.4908"
127.0.0.1:16379> 

八、Stream类型(待补充)

redis 5.0后的类型,可用于持久化消息对啦。


版权声明:本文为weixin_45631654原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。