Redis 简介

Redis是开源的高性能Key-Value数据库,可以用于缓存等用途.

Redis可以提供事务和持久化支持保证并发安全性,并提供TTL(time to life)服务.

使用Redis

Ubuntu系统可以用包管理器安装Redis服务:

sudo apt-get install redis-server

并安装客户端:

sudo apt-get install redis-tools

进入Redis客户端

redis-cli

登录远程Redis服务

redis-cli -h host -p port -a password

Redis基本操作指令

Redis的Key-Value均为大小写敏感的,但是Redis指令对大小写不敏感.

Redis使用字符串作为Key,常用操作命令有:

  • SET key val

设置键值对,无则新建有则更新

127.0.0.1:6379> set user name
OK
  • DEL key

删除键值对, 返回删除的条数

127.0.0.1:6379> del user
(integer) 1
  • GET key

返回Value

127.0.0.1:6379> get user
"name"
  • EXISTS key

检查指定键值对是否存在

127.0.0.1:6379> exists user
(integer) 1
  • KEYS pattern

使用通配符筛选显示所有符合条件的键

127.0.0.1:6379> keys *
1) "playing_yichya"
2) "playing_yy"
3) "online_yichya"
4) "user"
5) "online_yy"
127.0.0.1:6379> keys *_*
1) "playing_yichya"
2) "playing_yy"
3) "online_yichya"
4) "online_yy"
  • RANDOMKEY

随机返回一个键

127.0.0.1:6379> randomkey
"hm1"
  • RENAME key newname

重命名键

127.0.0.1:6379> set user2 234
OK
127.0.0.1:6379> set user 233
OK
127.0.0.1:6379> rename user user2
OK
127.0.0.1:6379> get user
(nil)
  • RENAMEX key newname

重命名键, 不允许新名与已有的键名重复

  • QUIT

退出redis客户端

Redis TTL服务命令

  • EXPIRE key seconds

以秒为单位,指定键值对的生存周期

127.0.0.1:6379> expire user 10000
(integer) 1
  • PEXIRE key mseconds

以毫秒为单位,指定键值对的生存周期

  • TTL key

以秒为单位,返回键值对的剩余生存周期

127.0.0.1:6379> ttl user
(integer) 9996
  • PTTL key

以毫秒为单位,返回键值对的剩余生存周期

127.0.0.1:6379> pttl user
(integer) 9991684
  • PERSIST key

将键值对的生存周期设为永久

127.0.0.1:6379> persist user
(integer) 1
  • EXPIREAT key timestamp

使用Unix时间戳指定过期时间

Redis哈希命令

Redis哈希命令以Hash表作为数据结构, Hash表中所有键值对共享同样的TTL,并有着比通常键值对更快的操作速度.

  • HSET table key val

示例:

127.0.0.1:6379> hset hml yichya 233
(integer) 1

执行keys和hkeys命令,可以看出hash表的数据结构

127.0.0.1:6379> keys *
1) "hml"
2) "user"
127.0.0.1:6379> hkeys hml
1) "yichya"
  • HDEL table key

删除键

  • HGET table key

得到键值对

  • HKEYS tabel

得到哈希表上所有键

  • HGETALL table

返回所有key和value

127.0.0.1:6379> hgetall hml
1) "yichya"
2) "233"

Redis事务支持

  • MULTI

开启事务块

127.0.0.1:6379> multi
OK
  • EXEC

提交事务执行

  • DISCARD

放弃事务

  • WATCH key [key ...]

WATCH命令在事务执行之前监控Keys.

若在WATCH之后有任何Key的值发生了变化,EXEC命令执行的事务都将被放弃,同时返回Null multi-bulk

  • UNWATCH

放弃所有WATCH

Python使用Redis数据库

redis-py是常用的python-redis连接器,使用python包管理器安装此模块:

pip install redis

在Python环境下导入redis模块

>>> from redis import Redis

>>> r = Redis()

Redis是封装了Redis数据库操作的类,并提供了类似的API.

使用JSON存储

除Redis-Hash表之外,redis-py将键值都作为字符串处理

>>> r.set('user', 233)
True
>>> r.get('user')
'233'

对于复杂数据类型,处理返回的字符串非常不便:

>>> r.set('user', [1,[{'name':'yichya'}]])
True
>>> r.get('user')
"[1, [{'name': 'yichya'}]]"
>>> result = r.get('user')
>>> list(result)
['[', '1', ',', ' ', '[', '{', "'", 'n', 'a', 'm', 'e', "'", ':', ' ', "'", 'y', 'i', 'c', 'h', 'y', 'a', "'", '}', ']', ']']

可以选择使用JSON作为存储类型,并以python内置json模块进行编码和解码.

另外,一个redis实例只维护一个数据表而应用中经常出现需要维护多个字典的情况.

草民建议使用prefix+key作为redis的键来模拟多个数据表.

草民写了一个简单的Redis-dict适配器,允许以类似字典的方式操作Redis数据库:

from redis import Redis

import json

class RedisDict:
def __init__(self, prefix=''):
self.data = Redis()
self.prefix = prefix def get(self, key):
redis_key = self.prefix + '_' + key
redis_val = self.data.get(redis_key)
if redis_val is None:
return None
else:
return json.loads(redis_val) def set(self, key, val):
redis_key = self.prefix + '_' + key
redis_val = json.dumps(val)
self.data.set(redis_key, redis_val) def pop(self, key):
redis_key = self.prefix + '_' + key
self.data.delete(redis_key) def __iter__(self):
for item in self.data.keys(self.prefix + '*'):
prefix, key = decode(item)
yield key def decode(redis_key):
sep = redis_key.find('_')
prefix = redis_key[:sep]
key = redis_key[sep+1:]
return prefix, key if __name__ == '__main__':
r = RedisCache('online')
r.set('user', [1,[{'name':'yichya'}]])
for item in r:
print(item)
print(r.get(item))

hash表操作

redis-py的hash操作与redis命令类似:

from redis import Redis
import json class RedisDict:
def __init__(self, table):
self.session = Redis()
self.table = table
self.session.delete(table) def get(self, key):
redis_val = self.session.hget(self.table, key)
if redis_val is None:
return None
else:
return json.loads(redis_val) def set(self, key, val):
redis_val = json.dumps(val)
self.session.hset(self.table, key, redis_val) def pop(self, key):
self.session.hdel(self.table, key) def __iter__(self):
for key in self.session.hkeys(self.table):
yield key

用hash表模拟dict,这个实现比用前缀区分高效得多.

pipeline操作

Redis-Server是一个TCP服务器,使用pipline维护消息队列可以提高批量处理的效率.

>>> p = r.pipeline()
>>> p.set('yichya', 2333)
Pipeline<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>
>>> p.get('yichya')
Pipeline<ConnectionPool<Connection<host=localhost,port=6379,db=0>>>
>>> p.execute()
[True, '2333']

参考链接:

Redis官网

redis-py

Redis 教程

使用Python操作Redis

Python使用Redis数据库的更多相关文章

  1. redis python 操作 Python操作Redis数据库

    原文章于此:https://www.cnblogs.com/cnkai/p/7642787.html 有个人修改与改正 Python操作Redis数据库   连接数据库 StrictRedisfrom ...

  2. python学习笔记(十六)python操作redis数据库

    Redis是一个key-value存储系统,它支持丰富的数据类型,如:string.list.set.zset(sorted set).hash. Redis特点 Redis以内存作为数据存储介质,所 ...

  3. Python操作Redis数据库

    连接数据库 StrictRedis from redis import StrictRedis # 使用默认方式连接到数据库 redis = StrictRedis(host='localhost', ...

  4. Python读写Redis数据库

    import redis class Database: def __init__(self): self.host = 'localhost' self.port = 6379 def write( ...

  5. python连接redis数据库的两种方式

    代码: # __author__ = 'STEVEN' import redis # 方式1,直接连接 # r = redis.Redis(host='192.168.43.22',port=6379 ...

  6. python安装Redis数据库

    where pip cd 切换这个目录 pip install redis import redis r = redis.Redis(host='127.0.0.1', port=6379) user ...

  7. Python之操作redis数据库

    使用redis模块 一.操作redis 1.添加信息 (1)直接建key-value信息: 右键-Add New Key,手动添加key和value 右键-Console,打开控制台,写入命令 (2) ...

  8. Python学习笔记(五)之Python操作Redis、mysql、mongodb数据库

    操作数据库 一.数据库 数据库类型主要有关系型数据库和菲关系型数据库. 数据库:用来存储和管理数的仓库,数据库是通过依据“数据结构”将数据格式化,以记录->表->库的关系存储.因此数据查询 ...

  9. Python 操作Redis 转载篇

    Python操作Redis数据库 连接数据库 StrictRedis from redis import StrictRedis # 使用默认方式连接到数据库 redis = StrictRedis( ...

随机推荐

  1. Spring Boot 2 实践记录之 Redis 及 Session Redis 配置

    先说 Redis 的配置,在一些网上资料中,Spring Boot 的 Redis 除了添加依赖外,还要使用 XML 或 Java 配置文件做些配置,不过经过实践并不需要. 先在 pom 文件中添加 ...

  2. BitAdminCore框架更新日志20180523

    20180523更新内容 本次更新两个内容,一是增加视频处理功能,二是增加定时服务功能. 视频处理 定时服务 BitAdminCore框架,用最少的代码,实现最多的功能 本次新暂未发布,后续有空发布 ...

  3. const的详解

    1.const的成员变量 常成员变量的值不能被更新,将在构造函数时候进行初始化 2.const的成员函数 常成员函数只能调用常成员函数,常成员函数不能修改任何成员变量的数值 3.const的成员对象 ...

  4. 这里给大家介绍一下通过 Wi-Fi 连接“慷慨捐赠”你的身份信息的七种方法.

    这里给大家介绍一下通过 Wi-Fi 连接“慷慨捐赠”你的身份信息的七种方法和反制措施. 本文作者:黑子小盆友 1.利用免费热点 它们似乎无处不在,而且它们的数量会在接下来四年里增加三倍.但是它们当中很 ...

  5. webpack快速入门——集中拷贝静态资源

    工作中会有一些已经存在但在项目中没有引用的图片资源或者其他静态资源(比如设计图.开发文档), 这些静态资源有可能是文档,也有可能是一些额外的图片.项目组长会要求你打包时保留这些静态资源, 直接打包到制 ...

  6. Mongoose 分页查询优化、获取数据总长度

    无论是传统网页还是 ajax api,我们都不得不进行数据分页,一来节省带宽二来提升页面响应速度.作为一个数据完备的 web 应用,做好分页功能能极大提升用户体验. 简单的分页查询 在 mongoos ...

  7. class字节码结构(二)(访问标志、类索引、父类索引、接口索引集合)

    <Java虚拟机原理图解>1.3.class文件中的访问标志.类索引.父类索引.接口索引集合 字节码总体结构: 访问标志(access_flags)能够表示什么? 访问标志(access_ ...

  8. TestNG的常用注解

    @BeforeSuite:表示此注解的方法会在当前测试集合(Suite)中的任一测试用例开始运行之前执行 @AfterSuite:表示此注解的方法会在当前测试集合(Suite)中的所有测试程序运行结束 ...

  9. java语言编程入门

    1 概述 1.1 计算机 计算机包括硬件和软件两部分.硬件包括计算机中可以看得见的物理部分.软件提供看不见的指令.这些指令控制硬件并且使得硬件完成特定的任务. 1.2 程序设计 定义:创建(或开发软件 ...

  10. 【转】Entity framework 6 编写的通用数据类

    原文:http://blog.csdn.net/laokaizzz/article/details/25730813 准备参考