redis数据库的常用操作(python如何连接)

redis中文 官网:www.redis.com

redis英文官网:www.redis.io

 

redis是一个非关系型数据库 

redis自带反垃圾系统,就是导入数据的时候不用考虑数据的重复性,直接往redis中导入即可,会自动去重

 

redis作用:

1、内存缓存,将常用的数据放到redis中

通常服务器前面都会放一个缓存数据库,常用的cache、redis、memcache,首先缓存数据库从mysql中获取常用的数据,然后用户访问的时候就从缓存数据库去匹配数据,达到减轻后端mysql服务器的压力

2、消息中间件

也可以作为生产者消费者模型,就是生产者将数据放到redis中,然后消费者从redis中取数据

 

关于redis的数据库

默认选择的是0号数据库,redis总共有16个数据库

查看数据库,vim redis.conf 中 databases 16  # 就是告诉你总共有16个数据库

the default databases is DB 0 #就是告诉你在0号数据库

select num  # num就是0~16的任意数字,切换到指定的数据库

keys * # 查看当前数据库下所有的数据

move key db  # 就是把当前数据库下的指定的数据移动到指定的数据库下,key就是当前数据库下数据列表的名字,db就是0~16数据库的一个数字

 

linux下的安装

wget http://download.redis.io/releases/redis-5.0.4.tar.gz
mkdir redis # 创建一个redis的安装目录文件夹
cd redis # 进入安装目录
mv ../redis-5.0.4.tar.gz . # ..就是当前目录的上级目录,.就是当前目录,将上级目录的软件包复制到当前目录 tar xzf redis-5.0.4.tar.gz #解压安装包 cd redis-5.0.4 # 进入解压的文件夹 make # 编译
make install # 编译安装
src/redis-server # 启动服务(src/redis-server & 加了&就是后台执行,不会占用命令窗口)
ps aux | grep redis # 查看后台redis的端口号和进程号
src/redis-cli # 连接redis

安装后再src包下的一些文件用处

redis-server # 启动redis服务,默认端口6379,PID就是进程号

redis-cli # 连接redis服务的客户端工具

redis-check-rdb # 数据持久化的工具,就是数据落地的工具,同步到磁盘上,rdb是一种落地方式

redis-check-aof # 数据持久化的工具,就是数据落地的工具,同步到磁盘上,aof是另一种落地方式

redis-benchmark # redis压力测试工具

redis-sentinel #  哨兵机制,监控定位的作用,实际项目中会有多台redis,为什么有多台redis,就是如果一台挂了,其他的可以继续用,sentinel就是监控所有的redis,如果有一台挂了,那么sentinel就会把服务切换到另外的几台redis上

 

 

支持的数据结构有5种 # 重点面试题

1、字符串(strings)

2、链表(lists)

3、集合(sets)

4、有序集合(order set)

5、hash (列表)

 

字符串的操作

1、set key value ex(px) # 设置单个数据下的值超时时间,key就是设置的对象如name,value就是key下的值,ex是超时时间以秒为单位,px也是超时时间以毫秒为单位

2、get key # 获取值

3、MSET key value key value # 设置多个值,MSET后面可以跟多个key和value

4、mget key1 key2 key3 # 获取多个key值,mget后面可以跟多个key来取值

5、getset key value  # 先获取当前的key值并返回,然后将后面的value赋值给当前的key,也就是更新当前key的值

6、incr key # key自增加1,应用场景登录时候输入次数限制,达到错误限制次数则10分钟后再登录,在redis里面同incr就可以实现

7、incrby key 10  # 在incr key的基础上增加数字

8、incrbyfloat key 10.4 # 在incr key的基础上增加浮点数 

9、decr key  # incr key 自减1,如果key是浮点数float则会报错,必须set num 回整型才能自减

10、decrby key num # 在incr key 的基础上减指定数字

 

链表操作

1、lpush key value  # 从链表的左边去添加值,key就是链表名,value就是链表值可以是多个

2、lrange key start stop # 返回链表名中的值,start就是开始,stop就是结束,0 -1就是查看所有的值

3、llen key # 查看链表的长度

4、lindex key index # 返回链表名索引位的值,key就是链表名,index就是数字索引的位置

5、linsert key after value value # 在指定的链表的值的后面添加值,key就是链表名,value就是链表名下指定的值,value就是要插入的值

6、insert key before value value # 在指定的链表的值的前面添加值,key就是链表名,value就是链表名下指定的值,value就是要插入的值

 

集合的操作

这个集合如果是是一个社交网络就很有用,效率高

1、sadd key value... # 添加一个集合 ,key就是集合名,value就是集合中的元素,key后面可以跟多个value

2、smembers key # 查看集合中所有的成员,key就是集合名

3、sismember key value # 查看成员是否在集合中,key就是集合名,value就是查看的成员名

4、spop key  # 弹出集合中的值,key就是集合名

5、scard key # 判断集合的长度,key就是集合名

6、sinter key1 key2 # 求两个集合的交集,key就是集合名

7、sunio key1 key2 key3  # 求多个集合的并集

8、sdiff key1 key2 # 求集合的差集

 

有序集合 order set

1、zadd key nx value...  # 给集合设置一个数值,可以根据数值的大小给元素进行排序

2、zrank key value # 查看集合中指定值得排名

3、zrange key 0 -1 # 对指定的集合进行排序

4、zrange key 0 -1 withscores  # 把集合的值包括数值全部打印出来

5、zcard key # 返回集合中的元素

6、zcount key min max # 查看指定集合中数值区间的值得数量,min最小的数值,max最大的数值

 

hash数据结构

1、hset key field value # key就是一个列表名字,field就是列表中的key,value就是值,将key和value组成了一个json格式的数据结构 info = {‘key’:'value,'key':'value'}

2、hget key field # 查看指定列表名的指定key的值

3、hgetall key # 获取指定列表名中所有的field和value

4、hdel key field # 删除指定列表中的key

5、hlen key # 返回指定列表的长度,有多少个值

6、hexists key field # 判断指定列表中有没有指定的key

7、hkeys key # 返回指定列表中所有的key

8、hvals key # 返回指定列表中key对应的所有value值

9、del key1 key2...  # key就是列表名,删除指定列表,后面可以跟多个列表名

10、rename key newkey  # 修改指定列表的名字,newkey就是新名字

 

python连接redis

1、pip3 install redis  # 安装redis模块

2、vim redis.conf # linux下进入redis的目录下打开配置文件,然后找到protected-mode yes这一行,把yes改成no或者直接注释掉,其他的机器都能连

3、pkill redis # 杀掉redis的进程

4、src/redis-server & # 重启redis并在后台运行

5、src/redis-cli # linux下连接redis

 

python中要 import redis  # 导入这个模块

1、r = redis.Redis(host='loaclhost',port=6379,password='',db=0) # 实例化,host就是redis物理机的地址,port就是端口,password就是密码如果没有则为空,db就是几号数据库

2、r.get(key)  # 获取数据库下key的值,返回的值是在一个列表中

3、r.dbsize # 查看当前数据库下有多少条数据

4、r.delete('key') # 删除对象

5、r.set(‘key’,'value') # 增加对象并且添加值

6、r.save() # 将数据写回磁盘,保存时阻塞,成功返回True

7、r.flushdb() # 清空r中所有的数据

8、r.incr('key') # 对对象进行数值的自增

 

python中的pipeline操作  # pipeline 就是redis在提供单个请求中缓冲多条服务器命令的基类的子类,它通过减少服务器与客户端之间反复的TCP数据库包,从而大大的提高了执行批量命令的功能

p = r.pipeline()  # 创建一个管道

p.set('strings key','value') # 创建一个字符串类型的对象名,并且添加值

p.sadd('sets key','value') # 创建一个集合并且添加值

p.incr('key') # 对指定的key进行数值自增

p.execute()

这一系列的指令可以写在一起 p.set('strings key','value').sadd('sets key','value').incr('key').execute()

 

连接redis错误信息

1、如果连接时候还是提示只能本机连,则在src/redis-server 这条指令后面跟一条指令--protected-mode no 即可

 

比如统计一个页面的点击数

r.set('visit:index:total',0)  # 这个就是在Redis中创建一个对象是visit:index:total,然后value是0

r.incr('visit:index:total') # 每incr一次,value就会+1

 

如何保存一个对象数据

由于非关系型数据库没有固定的列,因此可以用hash类型保存多样化的对象,比如说保存用户的年龄,email,手机号等内容

r.hset('users:jim','name','jim')  # users相当于mysql里面的那张表的概念,可以理解成表名,后面的jim就是代表jim这条记录,可以理解成jim这个对象,name就是这个对象下的value值,可以有多个值

r.hgetall('users:jim') # 取出jim这个对象所有的数据,是以json格式的数据格式返回

 

社交网站中用redis做推荐系统原则参考

通过圈子可以找到有共同特征的人,当一个用户加入一个或几个圈子后,系统可以向用户推荐这个圈子中的人

r.sadd('circle:game:lol','user:zhangsan')  # 创建圈子并加入用户,circle:game:lol 这个表示游戏lol的圈子,user就是对象表示用户名,后面的value就是用户的名字或者账户

r.sadd('circle:soccer:InterMilan','user:lisi') # 创建一个足球圈子

r.smembers(‘circle:game:lol’) # 查看指定圈子中的所有数据

r.sinter('circle:soccer:InterMilan','circle:game:lol') # 查看两个圈子的交集,就是相同的人

 

redis中Pub和Sub可以构建实时的系统消息,比如实时聊天室,或者频道订阅的功能实现

r.subscibe news  # 订阅news这个频道,此时程序会阻塞

r.publish news message  # 想news这个频道发送消息,message就是内容

 

session 共享存入redis

我们可以把session存入redis,来进行共享

1、pip3 install diango-redis-session==0.5.6  # 安装session这个包

 

2、在django项目下的settings里面增加session包的配置

SESSION_ENGINE = 'redis_sessions.sessions' # 把session保存到哪个介质里

SESSION_REDIS_HOST = 'localhost' # 这个指定连接的地址

SESSION_REDIS_PORT = 6379  # 端口

SESSION_REDIS_DB = 4  # 这个就是指定第几号数据库

SESSION_REDIS_PASSWORD = '' # 这个指定密码,如果没有则为空

SESSION_REDIS_PREFIX = 'session' # 设置这个就是在保存的时候key自动保存成这个名字

 

3、在django的路由文件里配置 # urls.py里写路由

 

4、视图文件里要写代码  # views.py里面

def set_session(request):

  '''保存session的函数'''

  request.session['username'] = 'django' # 用户名

  request.session['verify_code'] = '123456' # 密码

  return HttpResponse('保存session成功')

def get_session(request):

  '''获取session数据,程序会自动从redis中取出session然后解析出来'''

  username = request.session.get('username') # 会自动连接上redis然后取出用户名

  verify_code = request.session.get('verify_code') # 同上

  text = 'username=%s,verify_code=%s'%(username,verify_code) # 拼接格式返回

  return HttpResponse(text)

 

posted @ 2019-05-13 22:41  clyde_S  阅读(888)  评论(0编辑  收藏  举报