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交互相关推荐

  1. Redis 数据操作

    redis-cli -h localhost -p 6379 auth 数据库密码 redis默认有16个 数据库(0-15) 命令提示符实现: 数据操作 一  Redis通用命令: 1. 切换数据库 ...

  2. 2.Redis数据操作

    redis是key-value的数据结构,每条数据都是一个键值对 键的类型是字符串 注意:键不能重复 值的类型分为五种: 字符串string 哈希hash 列表list 集合set 有序集合zset ...

  3. Redis数据操作(redis入门)

    一.字符串类型 在redis里面有一个特别重要的命令"keys",可以进行全部数据的列出. 1.设置新的数据: set username-dlnu hello; 2.取得对应的数据 ...

  4. python redis list操作_使用Python操作redis

    在使用python操作redis之前,需要先安装redis库: pip install redis. 创建连接方式: StrictRedis:实现大部分官方命令. Redis:是StrictRedis ...

  5. redis数据库及与python交互

    目录 redis数据操作 与python交互使用 redis数据操作 1.string类型:主要存储字符串 操作 命令 设置键值 set key value 设置键值与过期时间 setex key s ...

  6. 数据库和python的结合_redis数据库及与python交互用法简单示例

    本文实例讲述了redis数据库及与python交互用法.分享给大家供大家参考,具体如下: redis数据操作 1.string类型:主要存储字符串 操作 命令 设置键值 set key value 设 ...

  7. Python与MySQL交互中Python提交添加数据操作但数据库并未添加问题解决方案

    在Python中插入数据时,插入语句执行后,编译器没有报任何错误,且返回影响行数符合理想状态,但数据库中并没有出现新添加的数据.代码截取部分如下: import pymysql # 连接数据库conn ...

  8. 【Redis教程】与Python交互03

    请参考视频:redis教程 目录 3.1redis中常用命令 3.2redis与Python的交互 安装:pip install redis==3.3.5 连接: RtrictRedis对象与pyth ...

  9. python redis连接池获取后关闭_python通过连接池连接redis,操作redis队列

    在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...

最新文章

  1. Python入门(good)
  2. Centos7 安装redis
  3. 解决Pycharm:Windows Defender might be impacting your build performance.
  4. 【Arduino】HX711 拉力计称重模块 两个模块同时使用
  5. 开源的ResearchKit:苹果将如何颠覆未来医疗?
  6. MySQL存储结构的使用
  7. Python 中使用 for、while 循环打印杨辉三角练习(列表索引练习)。
  8. poj1942(求组合数)
  9. 漫话:为什么你下载小电影的时候进度总是卡在99%就不动了?
  10. 我国初步建立法规,短期难扭转生物多样性减少趋势
  11. rt1052 usb速率_rt1052 spi flash 读数据好慢
  12. 安装scrapy报错问题解决
  13. 【单目标优化求解】基于matlab遗传算法求解非线性目标函数最小值问题【含Matlab源码 1574期】
  14. 精华蚂蚁系统(解决旅行商 TSP问题)
  15. 音视频篇 - Android 音视频涉及到的技术
  16. RecSys'22|CARCA:交叉注意力感知上下文和属性进行推荐
  17. mysql显示1146_MySQL查询报错:ERROR 1146 (42S02): Table 'craw.sitePageConfig' doesn't exist
  18. [毕业生的商业软件开发之路]积累与创新
  19. fastadmin框架里基于x-editable实现的表格无刷新行内编辑功能的插件的‘datetime‘时间类型无法使用的解决方法
  20. php json接口转化为数组 生成xml接口

热门文章

  1. android4.0 开机启动activity 4.0,如何正确理解和使用Activity的4种启动模式
  2. 【Laravel-海贼王系列】第十三章,路由控制器解析
  3. 用户超5亿,三年投10亿,开发者如何抢滩支付宝小程序蓝海?
  4. Confluence 6 归档一个空间
  5. MySQL的行锁和表锁
  6. 用VIPER构建iOS应用
  7. 多线程安全问题产生解决方案
  8. 图文直播:Pokémon Go真爱粉与“脑残粉”之间的爱恨情仇
  9. (批量)备份github仓库到本地
  10. [bmgr]android应用数据备份以及还原