Redis基本介绍
Redis是一个开源的使用C语言编写,支持网络,可基于内存亦可持久化的日志型,Key-Value数据库,并提供多种语言的API
Redis特性
1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
2.Redis不仅仅支持简单的Key-Value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
3.Redis支持数据的备份,即master- slave模式的数据备份
Redis优势
1.性能极高,读写速度快
2.丰富的数据类型,支持Strings,Lists,Hash,Sets及Ordered Sets数据类型的操作
3.原子性,Redis的所有操作都是原子性,不会出现多进程,多线程的抢的问题,同时Redis还支持几个操作合并后的原子性执行
Redis应用场景
1.用来做缓存,redis的所有数据存放于内存中(内存数据库)
2.可以在某些特定应用场景下替代传统的数据库,如社交类的应用
3.在一些大型系统中,巧妙地实习那一些特定的功能:session共享,购物车等
Redis的安装
基于Linux系统下的安装
1.下载:wget http://download.redis.io/releases/redis-3.2.8.tar.gz

2.解压:tar -zxvf redis-3.2.8.tar.gz
3.复制,放到/usr/local/redis下面:sudo mv ./redis-3.2.8 /usr/local/redis
4.进入 /usr/local/redis/文件下: cd /usr/local/redis/
5.生成:sudo make
6.进行测试:sudo make test
7.安装redis:sudo make install 会安装到/usr/local/bin下面

8.进入/usr/local/bin,查看ls -la
9.安装成功后移动配置文件:cd /usr/local/redis;sudo cp redis.conf /etc/redis/redis.conf
Redis配置
核心配置选项
1.绑定ip:如果需要远程访问,可以将此行注释,或绑定一个真实的ip
bind 127.0.0.1
2.端口,默认位6379
port 6379
3.是否以守护进程进行
1)如果以守护进程运行,则不会在命令行阻塞,类似于服务
2)如果以非守护进程运行,则当前终端被阻塞
3)设置为yes表示守护进程,设置为no表示非守护进程
4)推荐设置为yes
daemonize yes
4.数据文件
dbfilename dump.rdb 写入这个文件中
5.数据文件存储路径
dir /var/redis 配置存储路径
6.日志文件
logfile /var/log/redis/redis-server.log
7.数据库,默认16个
database 16
8.主从复制,类似于双机备份
slaveof
Redis的服务器端和客户端的启动
服务器端
使用ps -ef|grep redis查看redis是否启动
启动redis服务器端:sudo redis-server /etc/redis/redis.conf,停止redis服务器:sudo kill -9 +redis的pid (这是更改了配置文件位置的启动方法)
若没有更改配置文件位置,则sudo service redis start启动,停止是sudo service redis stop
客户端
redis-cli 进行连接
输入ping 进行测试,若回复pong,则连通
连接成功默认是连接第一个数据库,默认16个,0-15来标识,用select n(表示切换到哪一个数据库)
exit 退出
Redis的数据结构
redis是key-value的数据结构,每条数据都是一个键值对
键的类型是字符串,且键不能重复
值的类型分为五种: 1.字符串string 2.哈希hash 3.列表list 4.集合set 5.有序集合zset
键命令
适合所有类型的命令
1.查找键,参数支持正则表达式:keys pattern
例如:查看说有键
keys *
例如:查看名称中以a开头的键
keys a*
2.判断键是否存在,如果存在返回1,如果不存在返回0:exists key
例如:判断键a1是否存在
exists a1
3.查看键对应的value的类型:type key
例如:查看键a1的值类型,为redis支持的五种类型中的一种
type a1
4.删除键及对应的值:del key1 key2 ...
例如:删除键a2,a3
del a2 a3
5.如果没有指定过期时间则一直存在,直到使用del移除,设置过期时间,以秒为单位:expire key seconds
例如:设置键a1的过期时间为3秒
expire a1 3
6.查看键的有效时间,以秒为单位:ttl key
例如:查看键a的有效时间
ttl a
string类型
字符串类型是Redis中最为基础的数据存储类型,可以接受任何格式的数据,Redis中字符串类型的Value最多可以容纳的数据长度512M
保存
如果设置的键不存在则为添加,如果设置的键已经存在,则为修改
1.设置键值:set key value
例如: 设置键位name值为little_raccoon的数据
set name little_raccoon

2.设置键值以及过期时间,以秒为单位:setex key seconds value
例如:设置键位a值为aa过期时间为3秒的数据
setex a 3 aa

3.设置多个键:mset key1 value1 key2 value2 ...
例如:设置键a1 值为python 键a2 值为 java 键a3 值为 c++
mset a1 python a2 java a3 c++

4.追加值:append key value
例如:往键为a1中追加值world
append a1 world

获取
1.根据键获取值,如果不存在此键则返货null:get key
例如:获取键位name的值
get name
2.获取多个键的值:mget key1 key2 ...
例如获取a1,a2,a3的值
mget a1 a2 a3
hash类型
hash用于存储对象,对象的结构为属性,值。值得类型为string
增加,修改
1.设置单个属性:hset key field value
例如:设置键user的属性name为raccoon
hset user name raccoon
2.设置多个属性:hmset key field1 value1 field2 value2 ...
例如:设置键u2的属性name为raccoon ,属性age为18
hmset u2 name raccoon age 18
获取
1. 获取指定键所有属性:hkeys key
例如:获取键u2的所有属性
hkeys u2

2.获取一个属性的值:hget key field
例如:获取键u2属性name的值
hget u2 name
3.获取多个属性的值:hmget key field1 field2...
例如:获取键u2属性name,age的值
hmget u2 name age

4.获取所有的属性值:hvals key
例如:获取键u2所有属性的值
hvals u2

删除
1.删除整个hash键及值,使用del命令
2.删除属性,属性对应的值会被一起删除:hdel key field1 field2...
例如:删除键u2的属性age
hdel u2 age
List类型
列表的元素类型为string,按照插入顺序排序
增加
1.在左侧插入数据:lpush key value1 value2...
例如:从键为a0的列表左侧加入数据a,b,c
lpush a0 a b c
2.在右侧插入数据:rpush key value1 value2...
例如:从键为a0的列表右侧加入数据0,1
rpush a0 0 1
3.在指定元素的前或后插入新元素:linsert key before或after 现有元素 新元素
例如:在键位a0的列表中元素b前面加入3
linsert a0 before b 3

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

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

删除
1.删除指定元素:lrem key count value
将列表中前count次出现的值位value的元素移除
count>0:从头往尾移除
count<0: 从尾往头移除
count = 0:移除所有
例如:向列表l1中加入元素a,b,a,b,a,b
lpush l1 a b a b a b

从l1列表右侧开始删除2个b
lrem l1 -2 b

查看列表l1 的所有元素
lrange l1 0 -1

set类型
无序集合,元素为string类型,元素具有唯一性,不重复,对于集合没有修改的操作
增加
1.添加元素:sadd key member1 member2...
例如:向键s1中添加元素black white yellow
sadd s1 black white yellow

获取
1.获取所有的元素:smembers key
例如:获取键s1中的所有元素
smembers s1

删除
1.删除指定的元素:srem key members1 members2 ...
例如:删除键为s1的集合中元素black
srem s1 black

zset类型
有序的集合,元素为string类型,元素具有唯一性,不重复性,每个元素都会关联一个double类型的score,表示权重,通过权重将元素从小到大排序,没有修改操作
增加
1添加:zadd key score1 member1 score2 member2...
例如:向键z1中添加元素lisi,wangwu,zhangsan,liuming,权重分别为4,5,6,3
zadd z1 4 lisi 5 wangwu 6 zhangsan 3 liuming
获取
1.获取指定范围内的元素:zrange key start stop
start,stop为元素的下标索引
索引从左侧开始,第一个元素为0
索引可以是负数,表示从尾部开始计数,如-1表示最有一个元素
例如:获取z1集合中的所有元素
zrange z1 0 -1

2.返回score值在min和max之间的成员:zrangebyscore key min max
例如:获取z1集合中权重为5和6之间的成员
zrangebyscore z1 5 6

3.返回成员member的score值:zscore key member
例如:获取z1集合元素zhangsan的权重
zscore z1 zhangsan

删除
1.删除指定元素:zrem key member1 member2 ...
例如:删除集合z1中元素zhangsan
zrem z1 zhangsan
2.删除权重在指定范围的元素:zremrangebyscore key min max
例如:删除集合z1中权重在5,6之间的元素
zremrangebyscore z1 5 6
Redis参考文档: http://www.redis.cn/
Redis与python的交互
1.在虚拟环境中安装redis:pip install redis
2.调用模块:from redis import *
3.通过init创建对象,指定参数host,port与指定的服务器和端口连接,host默认为localhost,port默认为6379,db默认为0
sr = StrictRedis(host='localhost',port=6379,db=0)
简写:sr = StrictRedis()
根据不同的类型,拥有不同的实例方法可以调用,与前面学的redis命令对应

用Redis数据库存储session
django的session默认是存储在数据库里面的,可以将其放进redis里面
1.需要在虚拟环境中安装一个包:pip install django-redis-sessions==0.5.6
2.修改settings文件,增加如下内容:
SESSION_ENGINE = redis_sessions.session
SESSION_REDIS_HOST = 'localhost'
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 2
SESSION_REDIS_PASSWORD = ''
SESSION_REDIS_PREFIX = 'session' #session:唯一标识码