Redis

介绍

  redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

特点:

  1. 以字典结构存储数据
  2. 允许通过TCP协议读取字典的内容
  3. 强大的缓存系统, 可以为每个键设置TTL, 以及按照一定规则自动淘汰不需要的键
  4. 支持使用列表的形式构造任务队列
  5. 数据存储在内存中也可以持久化到硬盘

一、Redis安装和基本使用

1、安装

wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar xzf redis-3.2.8.tar.gz
cd redis-3.2.8
make && make install

redis安装在/usr/local/bin/目录

redis-benchmark: ==> 性能测试工具
redis-check-aof: ==> AOF文件修复工具
redis-check-dump: => RDB文件检查工具
redis-cli: ==> 命令行客户端
redis-sentinel: => 帮助管理redis实例的工具
redis-server: ==> redis服务器

启动服务端

#三种启动方式
redis-server 默认端口6379
redis-server --port 端口号
redis-server /path/to/redis.conf 启动时的配置文件将覆盖系统同名配置项

2、Redis的部署

  先为了方便管理,将Redis文件中的conf配置文件和常用命令移动到统一文件中

  修改redis.conf配置文件,我们使用redis安装目录中的redis.conf作为配置文件,将其拷贝到/usr/local/etc目录,以后运行redis服务,就指定该配置文件。

后台启动redis服务

a)首先编辑conf文件,将daemonize属性改为yes(表明需要在后台运行)

  cd etc/
  Vi redis.conf

  daemonize yes

b)再次启动redis服务,并指定启动服务配置文件

  redis-server /usr/local/redis/etc/redis.conf

Redis 操作常用命令

Redis-server /usr..../redis.conf 启动redis服务,并指定配置文件
Redis-cli 启动redis 客户端
Pkill redis-server 关闭redis服务
Redis-cli shutdown 关闭redis客户端
Netstat -tunpl|grep 6379 查看redis 默认端口号6379占用情况

二、Python操作Redis

1、安装redis-py

pip install redis

API使用

redis-py 的API的使用可以分类为:

  • 连接方式
  • 连接池
  • 操作
    • String 操作
    • Hash 操作
    • List 操作
    • Set 操作
    • Sort Set 操作
  • 管道
  • 发布订阅

2、使用 redis-py

  redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。

直接使用

import redis

r = redis.Redis(host='192.168.49.130', port=6379)
r.set('foo', 'Bar')
print r.get('foo')

创建连接池:

  redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。

import redis

pool = redis.ConnectionPool(host='192.168.49.130', port=6379)

r = redis.Redis(connection_pool=pool)
#r = redis.StrictRedis(connection_pool=pool) #StrictRedis也是支持的
r.set('foo', 'Bar')
print r.get('foo')

三、操作

a、String操作

  redis中的String在在内存中按照一个name对应一个value来存储。如图:

设值

1、set

set(name, value, ex=None, px=None, nx=False, xx=False)
#设值
在Redis中设置值,默认,不存在则创建,存在则修改
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行
xx,如果设置为True,则只有name存在时,岗前set操作才执行

2、setnx

setnx(name, value)
#设值,只有name不存在时,执行设置操作(添加)

3、setex

setex(name, value, time)
# 设值, 参数:time,过期时间(数字秒 或 timedelta对象)

4、psetex

psetex(name, time_ms, value)
# 设值 参数:time_ms,过期时间(数字毫秒 或 timedelta对象)

5.mset

mset(*args, **kwargs)
#批量设值
#如:
mset(k1='v1', k2='v2')
# 或
mget({'k1': 'v1', 'k2': 'v2'})

取值

1、get

get(name)
#取值

2、mget

mget(keys, *args)
#批量获取
#如:
mget('name', 'age')
# 或
r.mget(['name', 'age'])

3、getset

getset(name, value)
#设置新值并获取原来的值

bit方式取值设值

1、getrange

getrange(key, start, end)
# 获取子序列(根据字节获取,非字符)
# 参数:
# name,Redis 的 name
# start,起始位置(字节)
# end,结束位置(字节)
# 如: "神一样的人儿" ,0-3表示 "神"

2、setrange

setrange(name, offset, value)
# 修改字符串内容,从指定字符串索引开始向后替换(新值太长时,则向后添加)
# 参数:
# offset,字符串的索引,字节(一个汉字三个字节)
# value,要设置的值

3、setbit

setbit(name, offset, value)
# 对name对应值的二进制表示的位进行操作 # 参数:
# name,redis的name
# offset,位的索引(将值变换成二进制后再进行索引)
# value,值只能是 1 或 0 # 注:如果在Redis中有一个对应: n1 = "foo",
那么字符串foo的二进制表示为:01100110 01101111 01101111
# 所以,如果执行 setbit('n1', 7, 1),则就会将第7位设置为1,
那么最终二进制则变成 01100111 01101111 01101111,即:"goo" # 扩展,转换二进制表示: # source = ""
source = "foo" for i in source:
num = ord(i)
print bin(num).replace('b','') # 特别的,如果source是汉字怎么办?
#答:对于utf-8,每一个汉字占 3 个字节,汉字姓名一般为三个则有 9个字节
# 对于汉字,for循环时候会按照 字节 迭代,那么在迭代时,将每一个字节转换 十进制数,然后再将十进制数转换成二进制
11100110 10101101 10100110 11100110 10110010 10011011 11101001 10111101 10010000

4、getbit

getbit(name, offset)
# 获取name对应的值的二进制表示中的某位的值 (0或1)

5、bitcount

bitcount(key, start=None, end=None)
# 获取name对应的值的二进制表示中 1 的个数
# 参数:
# key,Redis的name
# start,位起始位置
# end,位结束位置

6、bitop

bitop(operation, dest, *keys)
# 获取多个值,并将值做位运算,将最后的结果保存至新的name对应的值 # 参数:
# operation,AND(并) 、 OR(或) 、 NOT(非) 、 XOR(异或)
# dest, 新的Redis的name
# *keys,要查找的Redis的name # 如:
bitop("AND", 'new_name', 'n1', 'n2', 'n3')
# 获取Redis中n1,n2,n3对应的值,然后讲所有的值做位运算(求并集),然后将结果保存 new_name 对应的值中

获取值的长度

strlen

strlen(name)
# 返回name对应值的字节长度(一个汉字3个字节)

自增

1、incr

incr(self, name, amount=1)
# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。 # 参数:
# name,Redis的name
# amount,自增数(必须是整数) # 注:同incrby

2、incrbyfloat

incrbyfloat(self, name, amount=1.0)
# 自增 name对应的值,当name不存在时,则创建name=amount,否则,则自增。 # 参数:
# name,Redis的name
# amount,自增数(浮点型)

3、decr

decr(self, name, amount=1)
# 自减 name对应的值,当name不存在时,则创建name=amount,否则,则自减。 # 参数:
# name,Redis的name
# amount,自减数(整数)

追加

append

append(key, value)
# 在redis name对应的值后面追加内容 # 参数:
key, redis的name
value, 要追加的字符串

更多参见:https://github.com/andymccurdy/redis-py/

http://doc.redisfans.com/

Redis一(Redis-py与String操作)的更多相关文章

  1. Redis源码之String操作

    0.前言 String操作是Redis操作中最基本的类型,包含get,set,mget,mset,append等等.下面我们会具体分析下一些命令的详细流程,特么简单的命令没有列出. 1.SET命令 2 ...

  2. Java Spring mvc 操作 Redis 及 Redis 集群

    本文原创,转载请注明:http://www.cnblogs.com/fengzheng/p/5941953.html 关于 Redis 集群搭建可以参考我的另一篇文章 Redis集群搭建与简单使用 R ...

  3. redis安装及数据类型简介(string、list、set、sorted_set、hash)

    一:简介: redis国内最大的案例--->新浪微博 memcache:是key-value数据库 数据类型:只支持key value数据 过期策略:支持 持久化:不支持(可以通过三方程序) 主 ...

  4. Redis:安装、配置、操作和简单代码实例(C语言Client端)

    Redis:安装.配置.操作和简单代码实例(C语言Client端) - hj19870806的专栏 - 博客频道 - CSDN.NET Redis:安装.配置.操作和简单代码实例(C语言Client端 ...

  5. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(九)Linux下安装redis及redis的常用命令和操作

    redis简介 Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis与其他key-value缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存 ...

  6. 数据库之redis篇(3)—— Python操作redis

    虽然前面两篇已经说了redis的一些配置安装什么的,篇幅有点长,可能看完了也不知道怎么操作,这里再浓缩一下: 什么是redis redis完全开源免费的,遵守BSD协议,是一个高性能的非关系型key- ...

  7. redis对键进行的相关操作

    redis对键操作的相关命令以及如何在python使用这些命令 redis对键操作的命令: 命令 语法 概述 返回值 Redis DEL 命令 del key [key ...] 该命令用于在 key ...

  8. 【redis】redis常用命令及操作记录

    redis-cli是Redis命令行界面,可以向Redis发送命令,并直接从终端读取服务器发送的回复. 它有两种主要模式:一种交互模式,其中有一个REPL(read eval print loop), ...

  9. Redis】Java中使用Jedis操作Redis(Maven导入包)、创建Redis连接池

    如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动. Maven项目可以直接在pom.xml中加入jedis包驱动: <!-- https: ...

随机推荐

  1. 两款 REST 测试工具

    用CURL命令行测试REST API 无疑是低效率的,这里把最近使用的两款 Chrome 插件总结下 POSTMAN 简单易用 REST Console 功能强大 使用的话用POSTMAN就够用了,但 ...

  2. poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙

    /** 题目:poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙 链接:http://poj.org/problem?id=3680 题意:给定n个区间,每个区间(ai,bi ...

  3. flask 邮箱配置

    http://blog.csdn.net/stan_pcf/article/details/51098126 先进入邮箱设置 POP3/SMTP/IMAP 下面代码来自知乎 https://www.z ...

  4. Tuning SQL 11

    这一章还是概述性的说明 优化器 现在都是在用 Cost-based 这种调优器 注意这本书的作者是个大牛, 他就是说 DBA OVER 那个人, Jonathan Lewis hint 是人告诉SQL ...

  5. EasyUI获取DataGrid中某一列的所有值

    function count() { var rows = $('#dg'').datagrid('getRows')//获取当前页的数据行 var total = 0; for (var i = 0 ...

  6. tomcat修改默认端口

    1.webserver: tomcat2.version:   Apache Tomcat/7.0.293.operation: 修改默认端口 3.1 修改tomcat目录下的/conf/server ...

  7. 禁用LinkButton的方法

    1.服务器端,使用Enabled属性即可 <asp:LinkButton ID="lbtn" runat="server" Enabled="f ...

  8. SQL Server Replace函数

    REPLACE用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式. 语法REPLACE ( 'string_expression1' , 'string_expression2' ...

  9. The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha

    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha ...

  10. 基础-Eclipse 教程

    1.Eclipse 是一个开放源代码的.基于 Java 的可扩展开发平台.2.下载地址为: https://www.eclipse.org/downloads/.3.Eclipse 修改字符集 : W ...