Redis数据操作和与Python交互
Redis数据操作和与Python交互
文章目录
- Redis数据操作和与Python交互
- 一、数据结构
- 1.String 字符串类型
- 2.Hash (哈希)
- 3.列表
- 4.Set 集合
- 5.zset 有序集合
- 6.键命令
- 二、Redis与Python交互
- 1.虚拟环境中安装redis
- 2.调⽤模块
- 3.StrictRedis对象⽅法
- 4.django存储session
一、数据结构
redis是key-value的数据结构,每条数据都是⼀个键值对
- 键的类型是字符串
注意:键不能重复
- 值的类型分为五种:
- 字符串string
- 哈希hash
- 列表list
- 集合set
- 有序集合zset
- 数据操作行为
- 保存
- 修改
- 获取
- 删除
1.String 字符串类型
是redis中最基本的数据类型,一个key对应一个value。
- String类型是
二进制安全的,意思是 redis 的 string可以包含任何数据
。如数字,字符串,jpg图片或者序列化的对象。
string类型:主要存储字符串
操作 | 命令 |
---|---|
设置键值 | set key value |
设置键值与过期时间 | setex key seconds(单位为秒) value |
设置多个键 | met key1 value1 key2 value2 … |
追加值 | append key value |
获取值 | get key |
获取多个 键的值 | mget key1 key2 … |
使用:get 、 set 、 del 、 incr、 decr 等
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)
127.0.0.1:6379> get counter
"2"
127.0.0.1:6379> incr counter
(integer) 3
127.0.0.1:6379> get counter
"3"
127.0.0.1:6379> incrby counter 100
(integer) 103
127.0.0.1:6379> get counter
"103"
127.0.0.1:6379> decr counter
(integer) 102
127.0.0.1:6379> get counter
"102"
实战场景:
- 1.
缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力
。 - 2**.计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。**
3.session:常见方案spring session + redis实现session共享
,
2.Hash (哈希)
是一个Mapmap,指值本身又是一种键值对结构
hash类型:主要用于存储对象,对象的结构为属性和值
操作 | 命令 |
---|---|
设置单个属性 | hset key field value (例:hset user name xiaoming) |
设置多个属性 | hmset key fiel1 value1 field2 value2… |
获取指定键所有属性 | hkeys key |
获取一个属性的值 | hget key field |
获取多个属性的值 | hmget key field1 field2… |
获取所有属性的值 | hvals key |
删除属性 | hdel key field1 field2… |
如 value={{field1,value1},......fieldN,valueN}}
使用:所有hash的命令都是 h 开头的 hget 、hset 、 hdel 等
127.0.0.1:6379> hset user name1 hao
(integer) 1
127.0.0.1:6379> hset user email1 hao@163.com
(integer) 1
127.0.0.1:6379> hgetall user
1) "name1"
2) "hao"
3) "email1"
4) "hao@163.com"
127.0.0.1:6379> hget user user
(nil)
127.0.0.1:6379> hget user name1
"hao"
127.0.0.1:6379> hset user name2 xiaohao
(integer) 1
127.0.0.1:6379> hset user email2 xiaohao@163.com
(integer) 1
127.0.0.1:6379> hgetall user
1) "name1"
2) "hao"
3) "email1"
4) "hao@163.com"
5) "name2"
6) "xiaohao"
7) "email2"
8) "xiaohao@163.com"
实战场景:
- 1.缓存: 能直观,相比string更节省空间,的维护缓存信息,如用户信息,视频信息等。
3.列表
- List 说白了就是链表(redis 使用双端链表实现的List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据。
使用列表的技巧
lpush+lpop=Stack(栈)
lpush+rpop=Queue(队列)
lpush+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息队列)
list类型:存储列表
操作 | 命令 |
---|---|
在左侧插入数据 | lpush key value1 value2… |
在右侧插入数据 | rpush key value1 value2… |
在指定元素前插入 | linsert key before 元素 插入元素 |
在指定元素后插入 | linsert key after 元素 插入元素 |
获取指定范围值 | lrange key start stop(支持负索引) |
设置指定索引位置的值(修改) | lset key index value |
删除指定元素 | lrem key count value (count>0表示从头到尾删除的次数,count=0删除所有,count<0表示从尾到头删除的次数) |
使用:
127.0.0.1:6379> lpush mylist 1 2 ll ls mem
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "mem"
2) "ls"
3) "ll"
4) "2"
5) "1"
127.0.0.1:6379>
实战场景:
- 1.timeline:例如微博的时间轴,有人发布微博,用lpush加入时间轴,展示新的列表信息。
4.Set 集合
集合类型也是用来保存多个字符串的元素
- 但和列表不同的是:
集合中 1. 不允许有重复的元素,2.集合中的元素是无序的,不能通过索引下标获取元素,3.支持集合间的操作,可以取多个集合取交集、并集、差集。
使用:命令都是以s开头的 sset 、srem、scard、smembers、sismember
set类型:存储无序集合
操作 | 命令 |
---|---|
添加元素 | sadd key member1 member2… |
获取所有元素 | smembers key |
删除指定元素 | srem key |
127.0.0.1:6379> sadd myset hao hao1 xiaohao hao
(integer) 3
127.0.0.1:6379> SMEMBERS myset
1) "xiaohao"
2) "hao1"
3) "hao"
127.0.0.1:6379> SISMEMBER myset hao
(integer) 1
实战场景;
- 1.标签(tag),给用户添加标签,或者用户给消息添加标签,这样有同一标签或者类似标签的可以给推荐关注的事或者关注的人。
- 2.点赞,或点踩,收藏等,可以放到set中实现
5.zset 有序集合
有序集合和集合有着必然的联系,保留了集合不能有重复成员的特性
- 区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。(有序集合中的元素不可以重复,但是score 分数 可以重复,就和一个班里的同学学号不能重复,但考试成绩可以相同)。
使用: 有序集合的命令都是 以 z 开头 zadd 、 zrange、 zscore
zset类型:有序集合,每个元素关联一个double类型的score,表示权重,按权重排序
操作 | 命令 |
---|---|
添加元素 | zadd key score1 member1 score2 memeber2… |
返回指定范围元素 | zrange key start stop |
返回指定范围权重的元素 | zrangebyscore key min max |
返回指定成员的权重 | zscore key member |
删除指定元素 | zrem key member1 member2… |
删除指定权重范围元素 | zrembyscore key min max |
127.0.0.1:6379> zadd myscoreset 100 hao 90 xiaohao
(integer) 2
127.0.0.1:6379> ZRANGE myscoreset 0 -1
1) "xiaohao"
2) "hao"
127.0.0.1:6379> ZSCORE myscoreset hao
"100"
实战场景:
- 排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。
6.键命令
操作 | 命令 |
---|---|
查找键(参数支持正则) | keys pattern(keys 查看所有键,keys a查找a开头的键) |
判断键是否存在 | exists key(存在返回1,不存在返回0) |
查看键的类型 | type key |
删除键及对应的值 | del key1 key2… |
设置键的过期时间 | expire key seconds |
查看键的有效时间 | ttl key |
官方操作详解
二、Redis与Python交互
1.虚拟环境中安装redis
安装包
安装Redis的有3种方式https://github.com/andymccurdy/redis-py
- 第一种:进⼊虚拟环境py_django,联⽹安装包redis
pip install redis
- 第二种:进⼊虚拟环境py_django,联⽹安装包redis
easy_install redis
- 第三种:到中⽂官⽹-客户端下载redis包的源码,使⽤源码安装
一步步执行
wget https://github.com/andymccurdy/redis-py/archive/master.zipunzip master.zipcd redis-py-mastersudo python setup.py install
2.调⽤模块
引⼊模块
from redis import *
这个模块中提供了StrictRedis对象(Strict严格),⽤于连接redis服务器
,并按照不同类型提供 了不同⽅法,进⾏交互操作
3.StrictRedis对象⽅法
- 通过init创建对象,指定参数host、port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默认为0
sr = StrictRedis(host='localhost', port=6379, db=0)
简写
sr=StrictRedis()
根据不同的类型,拥有不同的实例⽅法可以调⽤,与前⾯学的redis命令对应,⽅法需要的参数与命令的参数⼀致
例:
准备:
在桌面上创建redis目录
使用pycharm打开 redis目录
创建redis_string.py文件
from redis import *
if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()except Exception as e:print(e)
string-增加
⽅法set,添加键、值,如果添加成功则返回True,如果添加失败则返回False
编写代码如下
from redis import *
if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()#添加键name,值为itheimaresult=sr.set('name','itheima')#输出响应结果,如果添加成功则返回True,否则返回Falseprint(result)except Exception as e:print(e)
string-获取
⽅法get,添加键对应的值,如果键存在则返回对应的值,如果键不存在则返回None
编写代码如下
from redis import *
if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()#获取键name的值result = sr.get('name')#输出键的值,如果键不存在则返回Noneprint(result)except Exception as e:print(e)
string-修改
⽅法set,如果键已经存在则进⾏修改,如果键不存在则进⾏添加
编写代码如下
from redis import *
if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()#设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加result = sr.set('name','itcast')#输出响应结果,如果操作成功则返回True,否则返回Falseprint(result)except Exception as e:print(e)
string-删除
⽅法delete,删除键及对应的值,如果删除成功则返回受影响的键数,否则则返 回0
编写代码如下
from redis import *
if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()#设置键name的值,如果键已经存在则进⾏修改,如果键不存在则进⾏添加result = sr.delete('name')#输出响应结果,如果删除成功则返回受影响的键数,否则则返回0print(result)except Exception as e:print(e)
获取键
⽅法keys,根据正则表达式获取键
编写代码如下
from redis import *
if __name__=="__main__":try:#创建StrictRedis对象,与redis服务器建⽴连接sr=StrictRedis()#获取所有的键result=sr.keys()#输出响应结果,所有的键构成⼀个列表,如果没有键则返回空列表print(result)except Exception as e:print(e)
操作方法基本与redis数据库操作一样
4.django存储session
- session的redis存储配置
安装包pip install django-redis-sessions==0.5.6
- 修改settings文件,增加如下项
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS_HOST = 'localhost'
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 2
SESSION_REDIS_PASSWORD = ''
SESSION_REDIS_PREFIX = 'session'
- 测试
打开booktest/views.py文件,创建session_set和session_get视图如下
def session_set(request):request.session['name']='itheima'return HttpResponse('ok')def session_get(request):name=request.session['name']return HttpResponse(name)
- 打开booktest/urls.py文件,配置url如下
url(r'^session_set/$',views.session_set),url(r'^session_get/$', views.session_get),
- 通过redis-cli客户端查看
Base64在线解码http://base64.xpcha.com/
Redis数据操作和与Python交互相关推荐
- Redis 数据操作
redis-cli -h localhost -p 6379 auth 数据库密码 redis默认有16个 数据库(0-15) 命令提示符实现: 数据操作 一 Redis通用命令: 1. 切换数据库 ...
- 2.Redis数据操作
redis是key-value的数据结构,每条数据都是一个键值对 键的类型是字符串 注意:键不能重复 值的类型分为五种: 字符串string 哈希hash 列表list 集合set 有序集合zset ...
- Redis数据操作(redis入门)
一.字符串类型 在redis里面有一个特别重要的命令"keys",可以进行全部数据的列出. 1.设置新的数据: set username-dlnu hello; 2.取得对应的数据 ...
- python redis list操作_使用Python操作redis
在使用python操作redis之前,需要先安装redis库: pip install redis. 创建连接方式: StrictRedis:实现大部分官方命令. Redis:是StrictRedis ...
- redis数据库及与python交互
目录 redis数据操作 与python交互使用 redis数据操作 1.string类型:主要存储字符串 操作 命令 设置键值 set key value 设置键值与过期时间 setex key s ...
- 数据库和python的结合_redis数据库及与python交互用法简单示例
本文实例讲述了redis数据库及与python交互用法.分享给大家供大家参考,具体如下: redis数据操作 1.string类型:主要存储字符串 操作 命令 设置键值 set key value 设 ...
- Python与MySQL交互中Python提交添加数据操作但数据库并未添加问题解决方案
在Python中插入数据时,插入语句执行后,编译器没有报任何错误,且返回影响行数符合理想状态,但数据库中并没有出现新添加的数据.代码截取部分如下: import pymysql # 连接数据库conn ...
- 【Redis教程】与Python交互03
请参考视频:redis教程 目录 3.1redis中常用命令 3.2redis与Python的交互 安装:pip install redis==3.3.5 连接: RtrictRedis对象与pyth ...
- python redis连接池获取后关闭_python通过连接池连接redis,操作redis队列
在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...
最新文章
- Python入门(good)
- Centos7 安装redis
- 解决Pycharm:Windows Defender might be impacting your build performance.
- 【Arduino】HX711 拉力计称重模块 两个模块同时使用
- 开源的ResearchKit:苹果将如何颠覆未来医疗?
- MySQL存储结构的使用
- Python 中使用 for、while 循环打印杨辉三角练习(列表索引练习)。
- poj1942(求组合数)
- 漫话:为什么你下载小电影的时候进度总是卡在99%就不动了?
- 我国初步建立法规,短期难扭转生物多样性减少趋势
- rt1052 usb速率_rt1052 spi flash 读数据好慢
- 安装scrapy报错问题解决
- 【单目标优化求解】基于matlab遗传算法求解非线性目标函数最小值问题【含Matlab源码 1574期】
- 精华蚂蚁系统(解决旅行商 TSP问题)
- 音视频篇 - Android 音视频涉及到的技术
- RecSys'22|CARCA:交叉注意力感知上下文和属性进行推荐
- mysql显示1146_MySQL查询报错:ERROR 1146 (42S02): Table 'craw.sitePageConfig' doesn't exist
- [毕业生的商业软件开发之路]积累与创新
- fastadmin框架里基于x-editable实现的表格无刷新行内编辑功能的插件的‘datetime‘时间类型无法使用的解决方法
- php json接口转化为数组 生成xml接口