redis的使用

1、简介

1.1 概念

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

1.2 使用场景

  • 登陆会话存储,存储在redis中,与memcached相比,数据不会丢失
  • 排行版、计数器:好比一些秀场类的项目,常常会有一些前多少名的主播排名。还有一些文章阅读量的技术,或者新浪微博的点赞数。
  • 做为消息队列:好比celery就是redis做为中间人
  • 当前在线人数:显示有多少在线人数
  • 一些经常使用的数据缓存:好比BBS论坛,模块不会常常变化,可是每次访问首页都要从mysql中获取,能够在redis中缓存起来,不用每次请求数据库。
  • 把前200篇文章或者评论缓存:通常用户浏览网站,只会浏览前面一部分文章或者评论,那么能够把前面200篇文章和对应评论缓存起来。用户访问超过的,就访问数据库,而且之后文章超过200篇,则把以前的文章删除。
  • 好友关系:微博的好友关系使用redis实现
  • 发布和订阅功能:能够用来作聊天软件

2、对redis的操做

2.1 字符串操做(string)

(1)添加mysql

将字符串值value关联到key。若是key已经存在值,set命令会覆盖以前的值。默认的过时时间是永久。redis

set key value

(2)设置键值及过时时间,以秒为单位sql

setex key seconds value

(3)设置多个键值数据库

mset key1 value1 key2 value2 ...

(4)追加值django

append key value

(5)获取vim

get key

(6)获取多个键获取多个值缓存

mget key1 key2 ...

(7)删除服务器

del username

 2.2 键key操做

(1)查看全部键session

keys *

(2)查看名称中包含a的键

keys 'a*'

(3)判断键是否存在,若是存在返回1,不存在返回0

exists key1

(4)删除键及对应的值

del key1 key2 .

(5)设置过时时间,以秒为单位

expire key seconds

(6)查看有效时间,以秒为单位

ttl key

2.2 哈希操做(hash)

(1)设置单个属性

hset key field value

(2)设置多个属性

hmset key field1 value1 field2 value2 ..

(3)获取指定键全部的属性

hkeys key

(4)获取⼀个属性的值

hget key field

(5)获取多个属性的值

hmget key field1 field2 

(6)获取全部属性的值

hvals key

(7)删除整个hash键及值,使⽤del命令

hdel key field1 field2 ...

2.3 列表操做(list)

(1)在左侧插⼊数据

lpush key value1 value2 ...

(2)在右侧插⼊数据

rpush key value1 value2 ...

(3)在指定元素的前或后插⼊新元素

linsert key before或after 现有元素 新元素

(4)返回列表⾥指定范围内的元素

  • start、stop为元素的下标索引
  • 索引从左侧开始,第⼀个元素为0
  • 索引能够是负数,表示从尾部开始计数,如-1表示最后⼀个元素
lrange key start stop

(5)设置指定索引位置的元素值

  • 索引从左侧开始,第⼀个元素为0
  • 索引能够是负数,表示尾部开始计数,如-1表示最后⼀个元素
lset key index value

(6)删除指定元素

  • 将列表中前count次出现的值为value的元素移除
  • count > 0: 从头往尾移除
  • count < 0: 从尾往头移除
  • count = 0: 移除全部
lrem key count value

2.4 集合操做(set)

说明:对于集合没有修改操做

(1)添加元素

sadd key member1 member2 ...

(2)获取全部的元素

smembers key

(3)删除指定元素

srem key

2.5 zset类型

  • sorted set,有序集合
  • 元素为string类型
  • 元素具备惟⼀性,不重复
  • 每一个元素都会关联⼀个double类型的score,表示权重,经过权重将元素从⼩到⼤排序
  • 说明:没有修改操做

(1)添加

zadd key score1 member1 score2 member2 ...

(2)获取

  • 返回指定范围内的元素
  • start、stop为元素的下标索引
  • 索引从左侧开始,第⼀个元素为0
  • 索引能够是负数,表示从尾部开始计数,如-1表示最后⼀个元素

zrange key start stop

(3)返回score值在min和max之间的成员

zrangebyscore key min max

(4)返回成员member的score值

zscore key member

(5)删除指定元素

zrem key member1 member2 ...

(6)删除权重在指定范围的元素

zremrangebyscore key min max

2.6 事物操做

redis事务能够一次执行多个命令,事务具备如下特征:

  • 隔离操做:事务中的全部命令都会序列化,按顺序执行,不会被其它命令打扰。
  • 原子操做:事务中的命令要么所有被执行,要么所有不执行。

(1)开启一个事务

multi

之后执行的全部命令,都将在这个事务中执行。

(2)执行事务

exec

会将在multi和exec中的操做一并提交

(3)取消事务

discard

会将multi后的全部命令取消

(4)监视一个或者多个key

watch key .......

监视一个或多个key,若是在事务执行以前这个key被其它命令所改动,那么事务将被打断。

(5)取消全部key的监视

unwatch

3、RDB和AOF的两种数据持久化机制

RDB同步机制

  • 开启和关闭:默认状况下是开启了,若是想关闭,那么注释掉“redis.conf”文件中的全部“safe”选项就能够了
  • 同步机制:save 900 1 若是在900s之内发生了一次数据跟新操做,那么就会作一次同步操做;还有两种机制:save 300 10;  save 60 10000
  • 存储内容:存储的是具体的值,而且是通过压缩后存储进去的。
  • 存储路径:根据“redis.conf”下的dir以及‘rdbfilename’来制定的,默认是 /var/lib/redis/dump.rdb
  • 优势:1.存储数据到文件中会进行压缩,文件体积比AOF小;2.由于存储的是redis具体的值,而且通过压缩,所以在回复的时候速度比AOF快;3.很是实用于备份。
  •  缺点:1.RDB在多少时间内发生了多少写操做的时候就会触发同步机制,由于采用压缩机制,RDB在同步的时候都从新保存整个redis中的数据,所以通常会设置在最少5分钟才保存一次数据。在这种状况下,一单服务器故障,会形成5分钟的数据丢失

 AOF同步机制

  • 开启和关闭:默认是关闭的。若是想开启,那么修改redis.conf中的‘appendonly yes’ 就能够了
  • 同步机制:1.appendfsync always:每次有数据更新操做,都会同步到文件中;2.appendfsync everysec:每秒进行一次更新;3.appendfsync no:30s更新一次(采用默认的)
  • 存储内容:存储的是具体的命令,不会进行压缩。
  • 存储路径:根据redis.conf下的dir以及appendfilename来指定的。默认是 /var/lib/redis/appendonly.aof
  • 优势:1.AOF的策略是每秒钟或者每次发生写操做的时候都会同步,所以即便服务器故障,最对只会丢失1秒的数据;2.AOF存储的是redis的命令,而且是直接追加到aof文件后面,所以每次备份的时候只要添加新的数据进去就能够了。3.若是AOF文件比较大了,那么redis会进行重写,只保留最小的命令集合。
  • 缺点:1.AOF文件由于没有压缩,所以体积比AOF大;2.AOF是在每秒或者每次写操做都进行备份,所以若是并发量比较大,效率可能有点慢;3,AOF文件由于存储的是命令,所以在灾难恢复的时候redis会从新运行AOF中的命令,速度不及RDB。

4、设置redis的链接密码

(1)设置密码

  vim /etc/redis.conf 

打开配置文件,而后按“/”搜索“requirepass”,再按‘n’找到‘requirepass xxxxx’,取消注释,在后面加上要设置的密码 requirepass 123456.

(2)本地链接

redis-cli -p 6379 -h 127.0.0.1 -a 123456

能够在链接的时候,经过‘-a’参数指定密码进行链接,也能够先登陆上去,而后再使用‘auth password’命令进行受权。

 (3)其它机器链接redis

 若是想让其它机器链接本机的redis服务器,那么应该在‘redis.conf’配置文件中,指定“bind 本机的ip地址”,这样别的机器就能链接成功了。

vim /etc/redis.conf

按‘/’搜索‘bind’,后面指定本身机器的ip

5、Python操做redis

(1)安装

pip install redis

(2)链接

from redis import Redis

cache = Redis(host="139.199.131.146",port=6379,password=123456)

(3)字符串操做

cache.set('uers','derek')

cache.get('users')

cache.delete('users')

(4)列表操做

cache.lpush('users','tom')

print(cache.lrange('users',0,-1))

(5)集合的操做

cache.sadd('group','CEO')

print(cache.smembers('group'))

(6)哈希的操做

cache.hset('person','name','derek')

print('cache.hgetall('person')')

(7)事务的操做

pip = cache.pipeline()
pip.set('username','derek')
pip.set('password','123456')
pip.execute()

django存储session

  • 以前django的session默认是存在的数据库里面的,咱们也能够把session存储在redis里面
pip install django-redis-sessions==0.5.6
SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS_HOST = 'localhost'
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 2
SESSION_REDIS_PASSWORD = ''
SESSION_REDIS_PREFIX = 'session'
相关文章
相关标签/搜索