Redis基础

目录

Redis 简介

Redis 优势

Redis与其他key-value存储有什么不同?

Redis安装

Windows下的安装

1.启动服务

2. redis相关配置

  3. 连接测试

4.主从配置

5、编辑配置

Ubuntu 下安装

启动 Redis

查看 redis 是否启动?

Linux下安装

配置

服务器端

客户端

Redis 数据类型

String(字符串)

增加、修改

获取

键命令

删除

 

Hash(哈希)

增加、修改

获取

删除

list

增加

获取

修改

删除

set(无序集合)

增加

获取

删除

zset(有序集合)

增加

获取

删除

与python交互

安装包

调用模块

StrictRedis对象方法

string-增加

string-获取

string-修改

string-删除

获取键

主从配置


Redis 简介

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

 

Redis 与其他 key - value 缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  • Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
  • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,应为数据量不能大于硬件内存。在内存数据库方面的另一个优点是, 相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis安装

Windows下的安装

   redis的安装非常的简单,而且Redis并不依赖其他环境和标准库,很容易上手,这可能也是它流行的一个原因。这里为了测试方便,用的都是windows 环境下测试。下载Windows版本Redis。

Redis基础_第1张图片

    redis.windows.conf 是redis的配置文件。

     redis-server.exe  服务器端。

       redis-cli  命令行客户端。

     redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能。

1.启动服务

    在命令行输入如下命令 :redis-server  redis.windows.conf。

    同时也可以该命令保存为文件 startup.bat,下次就可以直接启动了。

Redis基础_第2张图片

如果提示redis-server 不是内部命令。将该目录加到环境变量里面即可。

2. redis相关配置

    1. port 端口号,例如6379

    2. bind 实例绑定的访问地址127.0.0.1

    3. requirepass 访问的密码

    4. maxheap 记得把这个配置节点打开,否者redis 服务无法启动。例如maxheap 1024000000

    5. timeout:请求超时时间

    6. logfile:log文件位置

    7. databases:开启数据库的数量

    8. dbfilename:数据快照文件名(只是文件名,不包括目录)

 

  3. 连接测试

    在命令行输入如下命令:redis-cli –h 127.0.0.1 –p 6379

    参数分别为host、port,如果设置了密码,则必须要加上-a 123456,123456为登录密码。否则会提示没有权限登录系统。

    如下图所示。

Redis基础_第3张图片

4.主从配置

Redis跟MySQL一样,拥有非常强大的主从复制功能,而且还支持一个master可以拥有多个slave,而一个slave又可以拥有多个slave,从而形成强大的多级服务器集群架构。
         Redis基础_第4张图片
  redis的主从复制是异步进行的,它不会影响master的运行,所以不会降低redis的处理性能。主从架构中,可以考虑关闭Master的数据持久化功能,只让Slave进行持久化,这样可以提高主服务器的处理性能。同时Slave为只读模式,这样可以避免Slave缓存的数据被误修改。

    实际生产中,主从架构是在几个不同服务器上安装相应的Redis服务。为了测试方便,我这边的主从备份的配置,都是在我Windows 本机上测试。

1. 安装两个Redis 实例,Master和Slave。将Master端口设置为6379,Slave 端口设置为6380 。bind 都设置为:127.0.0.1。

2. 在Slave 实例 ,增加:slaveof 127.0.0.1 6380 配置。

配置完成之后,启动这两个实例,如果输出如下内容,说明主从复制的架构已经配置成功了。

Redis基础_第5张图片

注意:在同一台电脑上测试,Master和Slave的端口不要一样,否则是不能同时启动两个实例的。

3.在命令行,分别连接上Master服务器和Slave 服务器。然后在Master 写入缓存,然后在Slave 中读取。如下图所示:

Redis基础_第6张图片

注意:slave只能读取,不能写入数据。

5、编辑配置

你可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置。

语法

CONFIG SET 命令基本语法:

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

实例

redis 127.0.0.1:6379> CONFIG SET loglevel "notice"
OK
redis 127.0.0.1:6379> CONFIG GET loglevel

1) "loglevel"
2) "notice"

参数说明

一般配置项:

  • 绑定ip:如果需要远程访问,可将此行注释,或绑定一个真实ip
bind 127.0.0.1
  • 端口,默认为6379
port 6379
  • 是否以守护进程运行
    • 如果以守护进程运行,则不会在命令行阻塞,类似于服务
    • 如果以非守护进程运行,则当前终端被阻塞
    • 设置为yes表示守护进程,设置为no表示非守护进程
    • 推荐设置为yes
daemonize yes
  • 数据文件
dbfilename dump.rdb
  • 数据文件存储路径
dir /var/lib/redis
  • 日志文件
logfile /var/log/redis/redis-server.log
  • 数据库,默认有16个
database 16

redis.conf 配置项说明如下:

1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程

    daemonize no

2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定

    pidfile /var/run/redis.pid

3. 指定Redis监听端口,默认端口为6379,作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字

    port 6379

4. 绑定的主机地址

    bind 127.0.0.1

5.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能

    timeout 300

6. 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose

    loglevel verbose

7. 日志记录方式,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null

    logfile stdout

8. 设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id

    databases 16

9. 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

    save

    Redis默认配置文件中提供了三个条件:

    save 900 1

    save 300 10

    save 60 10000

    分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。

 

10. 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大

    rdbcompression yes

11. 指定本地数据库文件名,默认值为dump.rdb

    dbfilename dump.rdb

12. 指定本地数据库存放目录

    dir ./

13. 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

    slaveof

14. 当master服务设置了密码保护时,slav服务连接master的密码

    masterauth

15. 设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH 命令提供密码,默认关闭

    requirepass foobared

16. 设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息

    maxclients 128

17. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区

    maxmemory

18. 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

    appendonly no

19. 指定更新日志文件名,默认为appendonly.aof

     appendfilename appendonly.aof

20. 指定更新日志条件,共有3个可选值: 
    no:表示等操作系统进行数据缓存同步到磁盘(快) 
    always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全) 
    everysec:表示每秒同步一次(折衷,默认值)

    appendfsync everysec

 

21. 指定是否启用虚拟内存机制,默认值为no,简单的介绍一下,VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中(在后面的文章我会仔细分析Redis的VM机制)

     vm-enabled no

22. 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

     vm-swap-file /tmp/redis.swap

23. 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多小,所有索引数据都是内存存储的(Redis的索引数据 就是keys),也就是说,当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0

     vm-max-memory 0

24. Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的 数据大小来设定的,作者建议如果存储很多小对象,page大小最好设置为32或者64bytes;如果存储很大大对象,则可以使用更大的page,如果不 确定,就使用默认值

     vm-page-size 32

25. 设置swap文件中的page数量,由于页表(一种表示页面空闲或使用的bitmap)是在放在内存中的,,在磁盘上每8个pages将消耗1byte的内存。

     vm-pages 134217728

26. 设置访问swap文件的线程数,最好不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟。默认值为4

     vm-max-threads 4

27. 设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启

    glueoutputbuf yes

28. 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法

    hash-max-zipmap-entries 64

    hash-max-zipmap-value 512

29. 指定是否激活重置哈希,默认为开启(后面在介绍Redis的哈希算法时具体介绍)

    activerehashing yes

30. 指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

    include /path/to/local.conf

Ubuntu 下安装

 在 Ubuntu 系统安装 Redi 可以使用以下命令:

$sudo apt-get update
$sudo apt-get install redis-server

启动 Redis

$redis-server

查看 redis 是否启动?

$redis-cli

以上命令将打开以下终端:

redis 127.0.0.1:6379>

127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命令。

redis 127.0.0.1:6379> ping
PONG

以上说明我们已经成功安装了redis。

Linux下安装

  • 下载:打开redis官方网站,推荐下载稳定版本(stable)
  • 当前ubuntu虚拟机中已经安装好了redis,以下步骤可以跳过
  • step1:解压
tar zxvf redis-3.2.5.tar.gz
  • step2:复制,放到usr/local目录下
sudo mv -r redis-3.2.5/* /usr/local/redis/
  • step3:进入redis目录
cd /usr/local/redis/
  • step4:生成
sudo make
  • step5:测试,这段运行时间会较长
sudo make test
  • step6:安装,将redis的命令安装到/usr/bin/目录
sudo make install
  • step7:配置文件,移动到/etc/目录下
  • 配置文件目录为/usr/local/redis/redis.conf
sudo cp /usr/local/redis/redis.conf /etc/redis/

配置

  • 绑定ip:如果需要远程访问,可将此行注释,或绑定一个真实ip
bind 127.0.0.1
  • 端口,默认为6379
port 6379
  • 是否以守护进程运行
    • 如果以守护进程运行,则不会在命令行阻塞,类似于服务
    • 如果以非守护进程运行,则当前终端被阻塞
    • 设置为yes表示守护进程,设置为no表示非守护进程
    • 推荐设置为yes
daemonize yes
  • 数据文件
dbfilename dump.rdb
  • 数据文件存储路径
dir /var/lib/redis
  • 日志文件
logfile /var/log/redis/redis-server.log
  • 数据库,默认有16个
database 16

服务器端

  • 服务器端的命令为redis-server
  • 可以使用help查看帮助文档
redis-server --help
  • 推荐使用服务的方式管理redis服务
  • 启动
sudo service redis start
  • 停止
sudo service redis stop
  • 重启
sudo service redis restart

客户端

  • 客户端的命令为redis-cli
  • 可以使用help查看帮助文档
redis-cli --help
  • 运行测试命令
ping
  • 切换数据库
  • 数据库没有名称,默认有16个,通过0-15来标识
select 1

Redis 数据类型

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

String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。

D:\redis-2.8.17>redis-cli.exe -h 127.0.0.1 -p 6379
127.0.0.1:6379> SET name "github.com"
OK
127.0.0.1:6379> GET name
"github.com"
127.0.0.1:6379>

在以上实例中我们使用了 Redis 的 SET 和 GET 命令。键为 name,对应的值为github.com。

注意:一个键最大能存储512MB。

增加、修改

  • 设置键值及过期时间,以秒为单位
setex key seconds value
  • 例2:设置键为'py2'值为'hr'过期时间为3秒的数据
setex 'py2' 3 'hr'
  • 设置多个键值
mset key1 value1 key2 value2 ...
  • 例3:设置键为'py3'值为'dx'、键为'py4'值为'xd'、键为'py5'值为'nd'、键为'py6'值为'bg'的数据
mset 'py3' 'dx' 'py4' 'xd' 'py5' 'nd' 'py6' 'bg'
  • 追加值
append key value
  • 例4:向键为py1中追加值' haha'
append 'py1' ' haha'

获取

  • 获取:根据键获取值,如果不存在此键则返回nil
get key
  • 例5:获取键'py1'的值
get 'py1'
  • 根据多个键获取多个值
mget key1 key2 ...
  • 例6:获取键'py3'、'py4'、'py5'、'py6'的值
mget 'py3' 'py4' 'py5' 'py6'

 

键命令

  • 查找键,参数支持正则表达式
keys pattern
  • 例1:查看所有键
keys *
  • 例2:查看名称中包含a的键
keys '*a*'
  • 判断键是否存在,如果存在返回1,不存在返回0
exists key1
  • 例3:判断键'py1'、'py2'是否存在
exists 'py1'
exists 'py2'
  • 查看键对应的value的类型
type key
  • 例4:查看键'py1'的值类型,为redis支持的五种类型中的一种
type 'py1'

删除

  • 删除键及对应的值
del key1 key2 ...
  • 例5:删除键'py3'、'py4'、'py5'、'py6'
del 'py3' 'py4' 'py5' 'py6'
  • 设置过期时间,以秒为单位
  • 如果没有指定过期时间则一直存在,直到使用DEL移除
expire key seconds
  • 例6:设置键'py1'的过期时间为10秒
expire 'py1' 10
  • 查看有效时间,以秒为单位
ttl key
  • 例7:查看键'py2'的有效时间
ttl 'py2'

 

Hash(哈希)

Redis hash 是一个键值对集合。

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

  • hash用于存储对象,对象的结构为属性、值
  • 值的类型为string

增加、修改

  • 设置单个属性
hset key field value
  • 例1:设置键'py2'的属性'name'为'hr'
hset 'py2' 'name' 'hr'
  • 设置多个属性
hmset key field1 value1 field2 value2 ...
  • 例2:设置键'py3'的属性'name'为'dx'、属性'gender'为'1'、属性'birthday'为'2017-1-1'
hmset 'py3' 'name' 'dx' 'gender' '1' 'birthday' '2017-1-1'

获取

  • 获取指定键所有的属性
hkeys key
  • 例3:获取键'py3'的所有属性
hkeys 'py3'
  • 获取一个属性的值
hget key field
  • 例4:获取键'py2'属性'name'的值
hget 'py2' 'name'
  • 获取多个属性的值
hmget key field1 field2 ...
  • 例5:获取键'py3'属性'name'、'gender'、'birthday'的值
hmget 'py3' 'name' 'gender' 'birthday'
  • 获取所有属性的值
hvals key
  • 例6:获取键'py3'所有属性的值
hvals 'py3'

删除

  • 删除整个hash键及值,使用del命令
  • 删除属性,属性对应的值会被一起删除
hdel key field1 field2 ...
  • 例7:获取键'py3'的属性'gender'、'birthday'
hdel 'py3' 'gender' 'birthday'

list

  • 列表的元素类型为string
  • 按照插入顺序排序

增加

  • 在左侧插入数据
lpush key value1 value2 ...
  • 例1:从键为'py11'的列表左侧加入数据'dx'、'xd'
lpush 'py11' 'dx' 'xd'
  • 在右侧插入数据
rpush key value1 value2 ...
  • 例2:从键为'py11'的列表右侧加入数据'nd'、'bg'
rpush 'py11' 'nd' 'bg'
  • 在指定元素的前或后插入新元素
linsert key before或after 现有元素 新元素
  • 例3:在键为'py11'的列表中元素'nd'前加入'zbt'
linsert 'py11' before 'nd' 'zbt'

获取

  • 返回列表里指定范围内的元素
    • start、stop为元素的下标索引
    • 索引从左侧开始,第一个元素为0
    • 索引可以是负数,表示从尾部开始计数,如-1表示最后一个元素
lrange key start stop
  • 例4:获取键为'py11'的列表所有元素
lrange 'py11' 0 -1

修改

  • 设置指定索引位置的元素值
    • 索引从左侧开始,第一个元素为0
    • 索引可以是负数,表示尾部开始计数,如-1表示最后一个元素
lset key index value
  • 例5:修改键为'py11'的列表中下标为1的元素值为'xidu'
lset 'py11' 1 'xidu'

删除

  • 删除指定元素
    • 将列表中前count次出现的值为value的元素移除
    • count > 0: 从头往尾移除
    • count < 0: 从尾往头移除
    • count = 0: 移除所有
lrem key count value
  • 例6.1:向列表'py12'中加入元素'h0'、'h1'、'h2'、'h0'、'h1'、'h3'、'h0'、'h1'
rpush 'py12' 'h0' 'h1' 'h2' 'h0' 'h1' 'h3' 'h0' 'h1'
  • 例6.2:从'py12'列表右侧开始删除2个'h0'
lrem 'py12' -2 'h0'
  • 例6.2:查看列表'py12'的所有元素
lrange 'py12' 0 -1

set(无序集合

  • 无序集合
  • 元素为string类型
  • 元素具有唯一性,不重复
  • 说明:对于集合没有修改操作

增加

  • 添加元素
sadd key member1 member2 ...
  • 例1:向键'py21'的集合中添加元素'yg'、'xln'、'yzp'
sadd 'py21' 'yg' 'xln' 'yzp'

获取

  • 返回所有的元素
smembers key
  • 例2:获取键'py21'的集合中所有元素
smembers 'py21'

删除

  • 删除指定元素
srem key member
  • 例3:删除键'py21'的集合中元素'yzp'
srem 'py21' 'yzp'

zset(有序集合)

  • sorted set,有序集合
  • 元素为string类型
  • 元素具有唯一性,不重复
  • 每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序
  • 说明:没有修改操作

增加

  • 添加
zadd key score1 member1 score2 member2 ...
  • 例1:向键'py31'的集合中添加元素'gj'、'hr'、'yg'、'xln',权限分别为1、5、8、3
zadd 'py31' 1 'gj' 5 'hr' 8 'yg' 3 'xln'

获取

  • 返回指定范围内的元素
    • start、stop为元素的下标索引
    • 索引从左侧开始,第一个元素为0
    • 索引可以是负数,表示从尾部开始计数,如-1表示最后一个元素
zrange key start stop
  • 例2:获取键'py31'的集合中所有元素
zrange 'py31' 0 -1
  • 返回score值在min和max之间的成员
zrangebyscore key min max
  • 例3:获取键'py31'的集合中权限值在4和9之间的成员
zrangebyscore 'py31' 4 9
  • 返回成员member的score值
zscore key member
  • 例4:获取键'py31'的集合中元素'yg'的权重
zscore 'py31' 'yg'

删除

  • 删除指定元素
zrem key member1 member2 ...
  • 例5:删除集合'py31'中元素'yg'
zrem 'py31' 'yg'
  • 删除权重在指定范围的元素
zremrangebyscore key min max
  • 例6:删除集合'py31'中权限在4、9之间的元素
zremrangebyscore 'py31' 4 9

 

与python交互

安装包

  • 进入虚拟环境py2_db,联网安装包redis
pip install redis
  • 到中文官网-客户端下载redis包的源码,使用源码安装
unzip redis-py-master.zip
cd redis-py-master
python setup.py install

调用模块

  • 引入模块
from redis import *
  • 这个模块中提供了StrictRedis对象,用于连接redis服务器,并按照不同类型提供了不同方法,进行交互操作

StrictRedis对象方法

  • 通过init创建对象,指定参数host、port与指定的服务器和端口连接,host默认为localhost,port默认为6379
  • 根据不同的类型,拥有不同的实例方法可以调用,与前面学的redis命令对应,方法需要的参数与命令的参数一致

string

  • set
  • setex
  • mset
  • append
  • get
  • mget

key

  • keys
  • exists
  • type
  • delete
  • expire
  • getrange
  • ttl

hash

  • hset
  • hmset
  • hkeys
  • hget
  • hmget
  • hvals
  • hdel

list

  • lpush
  • rpush
  • linsert
  • lrange
  • lset
  • lrem

set

  • sadd
  • smembers
  • srem

zset

  • zadd
  • zrange
  • zrangebyscore
  • zscore
  • zrem
  • zremrangebyscore

string-增加

  • 方法set,添加键、值,如果添加成功则返回True,如果添加失败则返回False
  • 创建文件redis_add.py,编写代码如下
#coding=utf-8
from redis import *

if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建立连接
        sr=StrictRedis()
        #添加键py1,值为gj
        result=sr.set('py1','gj')
        #输出响应结果,如果添加成功则返回True,否则返回False
        print result
    except Exception as e:
        print e

 

 

string-获取

  • 方法get,添加键对应的值,如果键存在则返回对应的值,如果键不存在则返回None
  • 创建文件redis_get.py,编写代码如下
#coding=utf-8
from redis import *

if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建立连接
        sr=StrictRedis()
        #获取键py1的值
        result = sr.get('py1')
        #输出键的值,如果键不存在则返回None
        print result
    except Exception as e:
        print e

string-修改

  • 方法set,如果键已经存在则进行修改,如果键不存在则进行添加
  • 创建文件redis_set.py,编写代码如下
#coding=utf-8
from redis import *

if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建立连接
        sr=StrictRedis()
        #设置键py1的值,如果键已经存在则进行修改,如果键不存在则进行添加
        result = sr.set('py1','hr')
        #输出响应结果,如果操作成功则返回True,否则返回False
        print result
    except Exception as e:
        print e

 

string-删除

  • 方法delete,删除键及对应的值,如果删除成功则返回受影响的键数,否则则返回0
  • 创建文件redis_delete.py,编写代码如下
#coding=utf-8
from redis import *

if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建立连接
        sr=StrictRedis()
        #设置键py1的值,如果键已经存在则进行修改,如果键不存在则进行添加
        result = sr.delete('py1')
        #输出响应结果,如果删除成功则返回受影响的键数,否则则返回0
        print result
    except Exception as e:
        print e

获取键

  • 方法keys,根据正则表达式获取键
  • 创建文件redis_keys.py,编写代码如下
#coding=utf-8
from redis import *

if __name__=="__main__":
    try:
        #创建StrictRedis对象,与redis服务器建立连接
        sr=StrictRedis()
        #获取所有的键
        result=sr.keys()
        #输出响应结果,所有的键构成一个列表,如果没有键则返回空列表
        print result
    except Exception as e:
        print e

主从配置

  • 一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构
  • 比如,将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作为从服务器
  • 说明:ip可以换为自己机器与同桌机器的地址
  • 设置主服务器的配置
bind 192.168.1.10
  • 设置从服务器的配置
  • 注意:在slaveof后面写主机ip,再写端口,而且端口必须写
bind 192.168.1.11
slaveof 192.168.1.10 6379
  • 在master和slave分别执行info命令,查看输出信息
  • 在master上写数据
set hello world
  • 在slave上读数据
get hello

 

 

 

你可能感兴趣的:(数据库)