redis

匿名 (未验证) 提交于 2019-12-03 00:44:02

使用redis

我们介绍一下redis的使用吧经过按部就班的安装之后,服务端是默认开启的,可以查看本地服务,找到Redis

那我们也可以通过cmd终端开启客户端 ,需要先切盘,cd 是在本盘中更换目录 盘d:切到d盘,然后更换目录 cd e:/redis

这样就可以输入开启命令行了 Redis-cli,可以select 加上索引更换db,默认是db0。

也可以通过可视化软件,redis desktop manage来操作redis数据库,我们不妨对比navicat,更有助于我们掌握理解知识。

redis的数据类型

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



Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。



Redis的Set是string类型的无序集合。值不重复。

sadd

如果 key 对应的 set 不存在则返回错误。


Redis zset 和 set 一样也是string类型元素的集合。且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。

python连接redis

方式一:实例化的对象连接

import redis r = redis.Redis(host='localhost',port = '6379') r.set('foo' ,'bar') print(r.get('foo'))

方式二:连接池

import redis  pool = redis.ConnectionPool(host='127.0.0.1',port='6379') r = redis.Redis(connection_pool=pool) r.set('outer','inner') print(r.get('outer'))

python操作redis数据

-redis之字符串常用操作

msetmget就是一次设置多个值和获取多个值

import redis  conn = redis.Redis(host ='127.0.0.1',port ='6379') conn.mset({'k1':'v1',"k2":'v2'})  #批量设置值 print(conn.mget('k1', 'k2'))  #批量获取 print(conn.mget(['k1', 'k2']))  #批量获取

incr就是增长,decr就是减少

conn.incr('age',2)  #默认是有amount参数等于1 也可以自己传参数 conn.decr('age',3)  #默认是有amount参数等于1 也可以自己传参数

append:字符串追加

conn.set('hub',12) conn.append('hub',4) print(conn.get('hub'))

得到的结果是:b'124'

redis之hash操作

hset 单个哈希的设置与获取

conn.hset('h1','key1','val1') print(conn.hget('h1', 'key1'))

hmsethmget批量哈希的设置与获取

conn.hmset('h2',{'key1':'val1','key2':'val2'}) print(conn.hmget('h2', ['key1', 'key2']))

hgetall获取全部的key值,hlen哈希的长度

print(conn.hgetall('h2')) print(conn.hlen('h2'))

hdel删除hincrby自增

conn.hdel('h2','key1')  #删除 conn.hset('h3','k1',1)  #设置 conn.hincrby('h3','k1')  #value自增,默认amount=1 ,也可以传参

hscan

增量式迭代获取,对于数据大的数据非常有用,hscan可以实现分片的获取数据,并非一次性将数据全部获取完,从而放置内存被撑爆   参数:     # name,redis的name     # cursor,游标(基于游标分批取获取数据)     # match,匹配指定key,默认None 表示所有的key     # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
for i in range(10000):     conn.hset('hash3','key%s'%i,'value%s'%i)     # 生成的哈希是无序的
print(conn.hscan('hash3',0,count=100)) 

hscan_iter

  利用yield封装hscan创建生成器,实现分批去redis中获取数据

   参数:     # match,匹配指定key,默认None 表示所有的key     # count,每次分片最少获取个数,默认None表示采用Redis的默认分片个数
for i in conn.hscan_iter('hash3',count=100):  #每次100的取数据 防止内存撑爆     print(i)

redis之列表操作:

  lpush设置值

conn.lpush('list2','a','b','c') print(conn.lindex('list2',2))

  llen列表长度

conn.llen('list2')  #可以加print打印出列表长度

  linsert插入

conn.linsert('list2','after','c','bc')

  lpop删除

在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素
在name对应的列表的左侧获取第一个元素并在列表中移除,返回值则是第一个元素conn.lpop('list2') #山到最后一个就把整个name删除了

  blpop阻塞态删除

from redis import Redis conn=Redis() conn.lpush('list1',10)

在另一个py文件中引入list1

print(conn.lpop('list1')) #没有值可以阻塞住,可以实现分布式 # print(conn.blpop('list1'))

管道实现事物

conn=Redis() pipe = conn.pipeline(transaction=True) pipe.multi() pipe.set('name', 'alex') pipe.set('role', 'sb') pipe.execute()

django中应用redis

方式一:

新建redis_pool.py:

import redis POOL = redis.ConnectionPool(host='127.0.0.1', port=6379,password='1234',max_connections=1000)

那么在视图函数中我们就可以引用了

import redis from django.shortcuts import render,HttpResponse from utils.redis_pool import POOL  def index(request):     conn = redis.Redis(connection_pool=POOL)     conn.hset('kkk','age',18)      return HttpResponse('设置成功') def order(request):     conn = redis.Redis(connection_pool=POOL)     conn.hget('kkk','age')      return HttpResponse('获取成功')

方式二:

安装django-redis模块,在settings里面配置

CACHES = {     "default": {         "BACKEND": "django_redis.cache.RedisCache",         "LOCATION": "redis://127.0.0.1:6379",         "OPTIONS": {             "CLIENT_CLASS": "django_redis.client.DefaultClient",             "CONNECTION_POOL_KWARGS": {"max_connections": 100}             # "PASSWORD": "123",         }     } }

在视图函数中:

from django_redis import get_redis_connection conn = get_redis_connection('default') print(conn.hgetall('xxx'))

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!