最近在学习redis,学习的初衷是做一个分布式的Python爬虫,需要用到redis和scrapy结合,现在才刚刚入门,学习redis相关命令,记录下来。
之前学习过Mysql之类的关系型数据库,初次接触Nosql,需要记的东西比较多。
打开redis服务redis-server /opt/redis/redis.conf
(我的配置文件单独放在opt/redis目录下),选择6379端口,redis-cli -p 6379
首先是插入命令,比较一下Mysql,insert 语句,redis只需要set name king
,redis是键值对的组合,所以不能与Mysql进行比较,上面的代码段意思是键name 的值为 ‘king’,DEL name
删除键name。
如果要取出值,get name
,遍历的话,keys *
类似于Mysql 中select *from xxx
。
redis自带16个数据库,想要切换到哪个数据库select 数字,比如 select 1,切换到1号数据库,不过起始是从0开始的,FLUSHALL
清空所有的数据库(16个数据库),FLUSHDB
清空本数据库。
其次是,对数据的操作,TYPE name
命令显示键值的类型,STRLEN name
显示键所对应值的长度,还有增加减少键值(只能针对整数操作):
set m 1
INCR m //m=2 increase
INCR m // m=3
DECR m // m=2 decrease
DECR m // m=1
INCRBY m 5 // m=6 每次增加5
DECRBY m 5 // m=1 每次减少5 m后面的数字必须是正整数
APPEND m 2
get m //结果是 '12' 追加到后面
APPEND m 123456
get m // 12123456
GETRANGE m 0 3 //得到一个范围,类似于Python里面的range(),结果是 1212
SETRANGE m 0 xxx //范围赋值加覆盖 ,得到的结果是 xxx23456
SETRANGE m 7 xxx // xxx2345xxx
设置键存在的时间:
setex m 20 king //设置m的值为"king",存在的时间为20s,20s后m键不存在
setnx m qq //如果之前m存在,则m ='qq'这个设值失败,返回0,反之成功,返回1
ttl m 可以查看m存在剩余的时间,如果为-1。则是永久 time to leave 的缩写
设置多个键值对
mset m1 v1 m2 v2 m3 v3 // m1='v1' ,m2='v2', m3='v3' mget = more get
mget m1 m2 m3 // v1 ,v2 ,v3
msetnx m4 v4 m3 v3 // m4不存在,而m3存在,则失败,一荣俱荣,一辱俱辱,要么一起赋值成功,要么都失败
List数据类型
LPUSH list1 1 2 3 4 5
LRANGE list1 0 -1 // 结果是 54321 ,原因可以解释为从左边开始把列表压入栈中,出来当然相反
RRUSH list2 1 2 3 4 5 //结果是 12345 ,原因如上,从右边压入
LINDEX LIST1 0 //结果是5,索引是从栈顶开始数
LREM list2 1 3 //从list2列表中移除一个3,前面一个是移除值的个数,后面一个是值,意思是就是移除一个3
LTRIM //截取数据
LPUSH list5 1 2 3 4 5
LTRIM list5 0 2 //截取从0下标到2,从栈顶开始数
LRANGE list5 0 -1 // 结果是5 4 3
LINSERT list5 BEFORE 5 'python' //在5的前面插入python
LINSERT list5 AFTER 'python' 'JAVA' //在python后面插入JAVA
Set类型
//添加元素
sadd set1 1 1 2 3 3 4
sadd set2 1 2 a s d f
SMEMBERS set1 //结果 1 2 3 4,去掉重复的类型,遍历
SISMEMBER set1 x //判断x是否在set1里面,返回0|1
SCARD set1 //获取set1里面的元素个数
SREM set1 2 //删除set1里面的值为2的元素
SRANDMEMBER set1 1 //从set1中随机抽取一个元素,后面的参数是随机抽取的个数
SPOP set1 //从set1中随机出栈
SMOVE set1 set2 1 //把1从set1中移到set2中
SDIFF set1 set2 //在第一个set1里面,不再第二个set2里面的元素 3 4
SINTER set1 set2 //两个set里面共有的元素,1 2
SUNION set1 set2 //两个set的并集 1 2 3 4 a s d f
Hash类型
//同样也是key-value对,不同的是 value = 键值对,这种比喻类似于二维数组,一维数组里面的一维数组
hset user id 1504
hget user id //结果1504
hmset user id 1504 name marktwin gender male
hmget user id name gender //结果1504 marktwin male,用法类似于上面的mset mget
hgetall user //把键值对都打印出来
hdel user age //删除age
hlen user //user的键值对个数
hexists user id //判断有无id这个键,返回 0|1
hkeys user //列出所有的键
hvals user //列出所有的值
hincrby user id 2 //id+2 HINCRBYFLOAT 增加浮点数
hsetnx user id 150409 //返回0|1 用法和setnx一样
Zset(sorted set)类型
zadd zset 60 v1 70 v2 78 v3 90 v4 //键值对set,前面是分数,后面是值
ZRANGE zset 0 -1 //
1) "v1"
2) "v2"
3) "v3"
4) "v4
ZRANGE zset 0 -1 withscores //包括分数一起打印
1) "v1"
2) "60"
3) "v2"
4) "70"
5) "v3"
6) "78"
7) "v4"
8) "90"
ZRANGEBYSCORE zset 60 80 //分数是60~80之间的 60<= score <=80
1) "v1"
2) "v2"
3) "v3"
ZRANGEBYSCORE zset (60 (80 //60<score<80 不包含
zrem zset v1 //删除
zcount zset 60 80 //统计60~80之间的个数
zrank zset v //取出下标
zscore v4 //去除v4对应的分数