redis

redis数据库其实用处还是很受限的 ,做为存储一般还是用MySQL和MongoDB,redis在前端中,其实主要是用来做缓存的,爬虫中,用到的不是很多,爬虫中涉及到的主要还是放在scrapy-redis分布式框架中,作为转态管理器的核心来使用,个人习惯是喜欢做分布式的时候,把他作为一个数据存储容器,之后再把数据导出redis,再导入MongoDB,当然这个看个人习惯,redis其实最有用的就是他的set,主要用来去重,其次是哈希这个用来保存数据

话不多说,开始进入redis之旅

在这里插入图片描述

其实redis没啥多说的,主要就是对几个数据类型的操作:

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

1.对String字符串操作(set,get
在这里插入图片描述
1、set方法:设置key对应的值为string类型的value,如果该key已经存在,则覆盖key对应的value值。所以在redis中key只能有一个。

127.0.0.1:6379> set name lijie

2、get:根据key获取value值

127.0.0.1:6379> get name

3、Setnx:设置key对应的值为string类型的value,如果key已经存在,返回0 表示无法再对该key设置新值,返回1 表示设置新值成功,nx是not exit的意思。

127.0.0.1:6379> setnx name zs
(integer) 0
127.0.0.1:6379> setnx age 20
(integer) 1

4、setex:设置key对应的值为string类型的value,并指定该key-value对应的有效期。

127.0.0.1:6379> setex color 10 red
OK
立即查询
127.0.0.1:6379> get color"red"
10秒后查询
127.0.0.1:6379> get color
(nil)

5、setrange:替换字符串。

127.0.0.1:6379> set email jalja@sina.com
OK
127.0.0.1:6379> get email
"jalja@sina.com"
127.0.0.1:6379> setrange email 6 163.com
(integer) 14
127.0.0.1:6379> get email
"jalja@163.comm"

6、mset:一次设置多个key-value,返回OK表示全部设置成功,返回0表示全部失败

127.0.0.1:6379> mset name1 zs name2 ls
OK
127.0.0.1:6379> get name1
"zs"
127.0.0.1:6379> get name2
"ls"

7、msetnx:一次设置多个key-value,返回1表示全部设置成功,返回0表示全部失败。该方式不会覆盖已经存在的key

127.0.0.1:6379> msetnx name3 kk name4 mm name2 LL
(integer) 0
127.0.0.1:6379> get name3
(nil)
127.0.0.1:6379> get name4
(nil)

8、getset:设置key值,并返回key的旧值,获取原值,并设置新值

127.0.0.1:6379> getset name4 UU
(nil)
127.0.0.1:6379> get name4
"UU"
127.0.0.1:6379> getset name4 RR
"UU"

9、getrange:获取key对应value的子字符串

127.0.0.1:6379> get email
"jalja@163.comm"
127.0.0.1:6379> getrange email 0 4
"jalja"

10、mget:一次获取多个key对应的value值,不存在返回nil

127.0.0.1:6379> mget name1 name2 name3 name4 name5
1) "zs"
2) "ls"
3) (nil)
4) "RR"
5) (nil)

11、incr:对key对应的value做加加操作,并返回新值

127.0.0.1:6379> get age
"20"
127.0.0.1:6379> incr age
(integer) 21

12、incrby:与incr类似,加指定值,key不存在的时候会设置key,并认为该key原来的value=0

127.0.0.1:6379> get age
"21"
127.0.0.1:6379> incrby age 9
(integer) 30
127.0.0.1:6379> incrby age -5
(integer) 25
127.0.0.1:6379> incrby height 10
(integer) 10

13、decr:对key对应的value做递减操作

127.0.0.1:6379> get height
"10"
127.0.0.1:6379> decr height
(integer) 9
127.0.0.1:6379> decr height
(integer) 8

14、decrby:对key对应的value减去指定的值

127.0.0.1:6379> get height
"8"
127.0.0.1:6379> decrby height 3
(integer) 5
127.0.0.1:6379> decrby height -3
(integer) 8

15、append:对key对应的vlaue字符串追加,返回新字符串的长度

127.0.0.1:6379> get name1
"zs"
127.0.0.1:6379> append name1 ML
(integer) 4
127.0.0.1:6379> get name1
"zsML"

16、strlen:获取key对应value的长度

127.0.0.1:6379> get name1
"zsML"
127.0.0.1:6379> strlen name1
(integer) 4

2.对Hash类型操作(实质就是字典操作)(hset,hget)

Redis hash 是一个string类型的filed和value的映射表、它的添加、删除操作都是0、1(平均操作)。Hash特别适合存储对象。相较于对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便存取整个对象。
在这里插入图片描述
1、hset:设置hash filed 为指定值,如果key不存在,则先创建。

127.0.0.1:6379> hset user:001 name zs
(integer) 1
127.0.0.1:6379> hget user:001 name
"zs"
**设置一个user:001 的用户的name为zs(可以将user:001看做一个表)**

2、 hsetnx:设置hash filed 为指定值,如果key不存在,则先创建。如果存在则返回0表示设置失败。

127.0.0.1:6379> hsetnx user:001 name ML
(integer) 0
127.0.0.1:6379> hsetnx user:001 age 1
(integer) 1

3、hmset:同时设置hash的多个file

127.0.0.1:6379> hmset user:002 name MM age 20
OK
127.0.0.1:6379> hget user:002 name
"MM"
127.0.0.1:6379> hget user:002 age
"20"

4、hmget:获取全部指定的hash filed

127.0.0.1:6379> hmget user:002 name age
1) "MM"
2) "20"

5、hincrby:对hash filed加上指定的值

127.0.0.1:6379> hget user:002 age
"20"
127.0.0.1:6379> hincrby user:002 age 5
(integer) 25
127.0.0.1:6379> hincrby user:002 age -5
(integer) 20

6、hexists:测试指定的filed是否存在,返回1表示存在,返回0表示不存在

127.0.0.1:6379> hexists user:002 name
(integer) 1
127.0.0.1:6379> hexists user:002 age
(integer) 1
127.0.0.1:6379> hexists user:002 height
(integer) 0

7、hlen:返回指定hash的field的数量

127.0.0.1:6379> hlen user:002
(integer) 2

8、hdel 删除指定hash 的filed字段,返回1表示删除成功0:表示删除失败

127.0.0.1:6379> hget  user:002 age
"20"
127.0.0.1:6379> hdel user:002 age
(integer) 1
127.0.0.1:6379> hdel user:002 age
(integer) 0
127.0.0.1:6379> hget user:002 age
(nil)

9、hkeys:返回hash 的所有filed

127.0.0.1:6379> hkeys user:001
1) "name"
2) "age"
127.0.0.1:6379> hkeys user:002
1)"name"

10、hvals:返回hash的所有value

127.0.0.1:6379> hvals user:001
1) "zs"
2) "1"
127.0.0.1:6379> hvals user:002
1) "MM"

3、对List列表类型 操作(就是key对应的是列表)(lpush,lpop)
在这里插入图片描述
List是一个链表结构,主要功能是push、pop,获取一个范围的所有值等等,操作中key理解为链表的名字。Redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push、pop操作链表的头部或者链表尾部添加元素,这样list既可以作为栈,又可以作为队列。
1、Lpush:在key对应list的头部添加字符串元素,返回list中元素的个数

127.0.0.1:6379> lpush list1 "hello"
(integer) 1
127.0.0.1:6379> lpush list1 "word"
(integer) 2

2、lrange:获取list中的元素,

127.0.0.1:6379> lrange list1 0 -1(0:第一个,-1:最后一个)
1) "word"
2) "hello"

3、rpush:在key对应的list尾部添加元素

127.0.0.1:6379> rpush list2 10
(integer) 1
127.0.0.1:6379> rpush list2 11
(integer) 2
127.0.0.1:6379> lrange list2 0 -1
1) "10"
2) "11"

4、Linsert:在key对应list的特定位置前或后添加字符串

127.0.0.1:6379> lrange list2 0 -1
1) "age"
2) "name"
127.0.0.1:6379> linsert list2 before name age2
(integer) 3
127.0.0.1:6379> lrange list2 0 -1
1) "age"
2) "age2"
3) "name"

5、lset:更改list中指定下标的元素,返回ok表示设置成功

127.0.0.1:6379> lrange list2 0 -1
1) "10"
2) "10.5"
3) "11"
127.0.0.1:6379> lset list2 1 10.00
OK
127.0.0.1:6379> lrange list2 0 -1
1) "10"
2) "10.00"
3) "11"

6、lrem:从key对应list中删除n个和value相同的元素(n<0 从尾部删除,n=0 全部删除)

127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
3) "one"
127.0.0.1:6379> lrem list 1 one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"

7、ltrim:保留list中指定范围的数据

127.0.0.1:6379> lrange list2 0 -1
1) "10"
2) "10.00"
3) "11"
4) "12"
127.0.0.1:6379> ltrim list2 1 2
OK
127.0.0.1:6379> lrange list2 0 -1
1) "10.00"
2) "11"

8、lpop:从list的头部删除元素,并返回该元素

127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lpop list
"two"
127.0.0.1:6379> lrange list 0 -1
1)"one"

9、rpop:从list尾部删除元素,并返回该元素
10、rpoplpush:从第一个list的尾部删除元素,并添加到第二个list的头部

127.0.0.1:6379> lrange list 0 -1
1) "one"
127.0.0.1:6379> lrange list1 0 -1
1) "word"
2) "hello"
127.0.0.1:6379> rpoplpush list1 list
"hello"
127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "one"
127.0.0.1:6379> lrange list1 0 -1
1)"word"

11、lindex 返回名称为key的list中index位置的元素

127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "one"
127.0.0.1:6379> lindex list 1
"one"

12、llen:返回指定key对应list的长度

127.0.0.1:6379> lrange list 0 -1
1) "hello"
2) "one"
127.0.0.1:6379> llen list
(integer) 2

4、对集合Sets类型操作(sadd)
在这里插入图片描述
集合和列表有两点最大的不同,第一是无序,第二是唯一
操作相对就简单了,因为无序,所以不存在左右的插入问题,直接是sadd team1 yaoming
其实集合和列表是一样的,因为无序所以有了一些变化,当然集合还有自己的特殊的集合运算

Set是一个string类型的无序集合,不允许重复。Set是通过hash table实现的。添加、删除、查找的复杂度都是0(1)。对集合我们可以取并集、交集、差集。
1、sadd:向key对应的set集合中添加元素,返回1表示添加成功,返回0 表示失败

127.0.0.1:6379> sadd myset1 one
(integer) 1
127.0.0.1:6379> sadd myset1 two
(integer) 1

2、Smembers:查看set集合中的元素

127.0.0.1:6379> smembers myset1
1) "two"
2) "one"

3、srem:删除key对应set集合中的元素,返回1表示删除成功 0表示失败

127.0.0.1:6379> srem myset1 two
(integer) 1

4、spop:随机删除set中的一个元素并返回该元素

127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
3) "four"
127.0.0.1:6379> spop myset1
"four"
127.0.0.1:6379> smembers myset1
1) "three"
2) "one"

5、sdiff:返回给定set集合的差集 (以在前的set集合为标准)

127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sdiff myset1 myset2
1) "three"
127.0.0.1:6379> sdiff myset2 myset1
1)"two"

6、sdiffstore:返回所有给定set集合的差集,并将差集添加到另外一个集合中

127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sdiffstore myset3 myset1 myset2
(integer) 1
127.0.0.1:6379> smembers myset3
1)"three"

7、sinter:返回所有给定集合的交集

127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sinter myset1 myset2
1)"one"

8、sinterstore:返回所有给定集合key的交集,并将结果存为另一个key

127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sinterstore myset4 myset1  myset2
(integer) 1 

9、返回所有给定集合的并集

127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sunion myset1 myset2
1) "three"
2) "two"
3) "one"

10、sunionstore 返回所有给定集合的并集,并将结果存入另一个集合

127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset2
1) "two"
2) "one"
127.0.0.1:6379> sunionstore myset5  myset1 myset2
(integer) 3

11、smove:从第一个集合中移除元素并将该元素添加到另一个集合中。

127.0.0.1:6379> smembers myset1
1) "three"
2) "one"
127.0.0.1:6379> smembers myset5
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> smove myset5 myset1 two
(integer) 1
127.0.0.1:6379> smembers myset5
1) "three"
2) "one"
127.0.0.1:6379> smembers myset1
1) "three"
2) "two"
3) "one"

12、Scard:返回set集合中元素的个数

127.0.0.1:6379> smembers myset1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> scard myset1
(integer) 3

13、sismember:测试member元素是否是名称为key的set集合 返回1:表示是 0:不是

127.0.0.1:6379> smembers myset1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> sismember myset1 tree
(integer) 0
127.0.0.1:6379> sismember myset1 three
(integer) 1

14、srandmember:随机返回set集合中的一个元素,但不删除该元素

127.0.0.1:6379> smembers myset1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379>  srandmember myset1
"one"

5.Sorted set (zadd,zset)类型

Sorted set是set的一个升级版,他在set的基础上增加了一个顺序属性,这一属性在添加元素的时候可以指定,每次指定后,zset会自动重新按新的值挑战顺序。可以理解为有两列的mysql表,一列存value,一列存顺序。操作key理解为zset的名字
1、zadd:向有序集合zset中添加元素并指定顺序,如果该元素已存在就更新元素顺序。

127.0.0.1:6379> zadd myzset1 1 one
(integer) 1
127.0.0.1:6379> zadd myzset1 2 two
(integer) 1

2、zrange:从zset集合中取元素 [withscores] 输出元素顺序号

127.0.0.1:6379> zadd myzset1 1 one
(integer) 1
127.0.0.1:6379> zadd myzset1 2 two
(integer) 1
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"

3、zrem:删除zset集合中指定的元素

127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "1"
3) "two"
4) "2"
127.0.0.1:6379> zrem myzset1 two
(integer) 1
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "1"

4、zincrby:若zset中已经存在元素member、则该元素的score增加incrment否则向该集合中添加该元素,其score的值为increment

例:改变myset1中one元素的顺序值
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "1"
127.0.0.1:6379> zincrby myzset1 2 one
"3"
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
5、zrank:返回zset中元素member的排名(score从小到大排序)即下标
127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zrank myzset1 four
(integer) 1

5、zrevrank:返回zset集合中member元素的排名(按照score倒叙)即下标

127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zrevrank myzset1 four
(integer) 1
127.0.0.1:6379> zrevrank myzset1 five
(integer) 0

6、zrevrange:从zset集合中倒叙(score倒叙)获取元素

127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zrevrange myzset1 0 -1 withscores
1) "five"
2) "5"
3) "four"
4) "4"
5) "one"
6) "3"

7、zrangebyscore:从zset集合中根据score顺序获取元素

127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zrangebyscore  myzset1 4 5 withscores
1) "four"
2) "4"
3) "five"
4) "5"

8、zcount:返回集合中score在给定区间的数量

127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zcount myzset1 3 4
(integer) 2

9:zcard:返回zset集合中所有元素个数

127.0.0.1:6379> zrange myzset1 0 -1 withscores
1) "one"
2) "3"
3) "four"
4) "4"
5) "five"
6) "5"
127.0.0.1:6379> zcard myzset1
(integer) 3

6.redis数据库的备份和恢复

1.启动redis

进入redis目录

redis-cli

2.数据备份

redis 127.0.0.1:6379> SAVE 

该命令将在 redis 备份目录中创建dump.rdb文件。

3.恢复数据

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:
1、获取备份目录

redis 127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/bin"   

以上命令 CONFIG GET dir 输出的 redis 备份目录为 /usr/local/redis/bin。

2、停止redis服务

3、拷贝备份文件到 /usr/local/redis/bin目录下

4、重新启动redis服务

redis作为windows服务启动方式
redis-server --service-install redis.windows.conf
启动服务:redis-server --service-start
停止服务:redis-server --service-stop

7.redis和python的交互
import redis

r=redis.Redis(host=‘localhost’,port=6379,decode_responses=True)
#r=redis.StrictRedis(host=‘localhost’,port=6379)

r.set(‘key’,‘value’)
value=r.get(‘key’)
print(type(value))
print(value)
r.hset(‘info’,‘name’,‘lilei’)
r.hset(‘info’,‘age’,‘18’)
print(r.hgetall(‘info’))
r.sadd(‘course’,‘math’,‘english’,‘chinese’)
print(r.smembers(‘course’))

当然也可以使用管道,来减少python和redis的交互
管道可以缓存命令,减少客户端与redis-server交互的次数

#创建一个管道值

	pipe = con.pipeline()
	pipe.get('name')
	pipe.set('name','xiao')
	#提交
	pipe.execute()

如果还有不懂的,可以参考这个链接:
https://blog.csdn.net/ATOOHOO/article/details/88971547

补充:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值