Remote Dlctionary Server(Redis)是一个key-value存储系统。
Redis是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis与其他key-value缓存产品有以下三个特点:
启动:redis-server *.conf
启动:redis-cli
sudo apt-get install redis-server
停止服务:service redis stop
启动服务:service redis start
启动服务端:redis-server
启动客户端:redis-cli
以指定配置文件启动服务端
redis-server "c:\Program Files\Redis\redis.conf
获取所有配置信息
config get *
获取单项配置信息
config get loglevel config get dbfilename
设置单项配置信息
config set loglevel warning
config set....
#设置数据库的数量,默认数据库为0,可以使用SELECT 命令在连接上指定数据库id
databases 16
#绑定的主机地址
bind 127.0.0.1
#绑定的主机端口
port 6379
#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save
#Redis默认配置文件中提供了三个条件:
save 900 1
save 300 10
save 60 10000
#分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改。
#指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
#指定本地数据库存放目录
dir ./
#设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH 命令提供密码,默认关闭
requirepass foobared
#设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步
slaveof
#当master服务设置了密码保护时,slav服务连接master的密码
masterauth
#Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
daemonize no
#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 300
设置
#设置键值
set key value
#设置键值及过期时间,以秒为单位
SETEX key seconds value
#设置多个键值
MSET key value [key value...]
获取
#根据键获取值,如果不存在此键则返回null
GET key
#根据多个键获取多个值
MGET key [key...]
运算
#要求:值是数字,将key对应的value加1
INCR key
#将key对应的value加整数
INCRBY key increment
#将key对应的value减1
DECR key
#将key 对应的value减整数
DECRBY key decrement
其它
#追加值
APPEND key value
#获取值长度
STRLEN key
键操作
#查找键,参数支持正则表达
KEYS pattern
#判断键是否存在,如果存在返回1,不存在返回0
EXISTS key [key...]
#查看键对应的value的类型
TYPE key
#删除键及对应的值
DEL key [key...]
#设置过期时间,以秒为单位,创建时没有设置过期时间则一直存在,直到使用DEL移除
EXPIRE key seconds
#查看有效时间,以秒为单位
TTL key
hash用于存储对象,对象的格式为键值对
#设置单个属性
HSET key field value
#设置多个属性
HMSET key field value [field value...]
#获取一个值属性
HGET key field
#获取所有的属性
HKEYS key
#返回包含属性的个数
HLEN key
#获取所有值
HVALS key
其它
#判断属性 是否存在
HEXISTS key field
#删除属性及值
HDEL key field [field...]
#返回值的字符串长度
HSTRLEN key field
设置
#在头部插入数据
LPUSH key value [value...]
#在尾部插入数据
RPUSH key value [value...]
#在一个元素的前|后插入新元素
LINSERT key BEFORE|AFTER pivot value
#设置指定索引的元素值
#索引是基于0的下标
#索引可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
LSET key index value
获取
#移除并且返回 key 对应的 list 的第一个元素
LPOP key
#移除并返回存于 key 的 list 的最后一个元素
RPOP key
#返回存储在 key 的列表里指定范围内的元素
#start 和 end 偏移量都是基于0的下标
#偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
LRANGE key start stop
其它
#裁剪列表,改为原集合的一个子集
#start 和 end 偏移量都是基于0的下标
#偏移量也可以是负数,表示偏移量是从list尾部开始计数,如-1表示列表的最后一个元素
LTRIM key start stop
#返回存储在 key 里的list的长度
LLEN key
#返回列表里索引对应的元素
LINDEX key index
设置
#添加元素
SADD key member [member ...]
获取
#返回key集合所有的元素
SMEMBERS key
#返回集合元素个数
SCARD key
其它
#求多个集合的交集
SINTER key [key ...]
#求某集合与其它集合的差集
SDIFF key [key ...]
#求多个集合的合集
SUNION key [key ...]
#判断元素是否在集合中
SISMEMBER key member
设置
#添加
ZADD key score member [score member ...]
获取
#返回指定范围内的元素
ZRANGE key start stop
#返回元素个数
ZCARD key
#返回有序集key中,score值在min和max之间的成员
ZCOUNT key min max
#返回有序集key中,成员member的score值
ZSCORE key member
命令
SUBSCRIBE 频道名称 [频道名称 ...]
UNSUBSCRIBE 频道名称 [频道名称 ...]
PUBLISH 频道 消息
bind 192.168.1.10
bind 192.168.1.11
slaveof 192.168.1.10 6379
set hello world
get hello
Redis 安全
配置密码
查看密码
CONFIG get requirepass
设置密码
CONFIG set requirepass 123456
远程连接
redis-cli -h 127.0.0.1 -p 6379 -a 123456
登录之后授权
auth 123456
#redis模块使用
#安装
pip install redis
#引入模块
import redis
#连接
try:
r=redis.StrictRedis(host='localhost',port=6379)
except Exception,e:
print e.message
#方式一:根据数据类型的不同,调用相应的方法,完成读写
#更多方法同前面学的命令
r.set('name','hello')
r.get('name')
#方式二:pipline
#缓冲多条命令,然后一次性执行,减少服务器-客户端之间TCP数据库包,从而提高效率
pipe = r.pipeline()
pipe.set('name', 'world')
pipe.get('name')
pipe.execute()
#封装
#连接redis服务器部分是一致的
#这里将string类型的读写进行封装
import redis
class RedisHelper():
def __init__(self,host='localhost',port=6379):
self.__redis = redis.StrictRedis(host, port)
def get(self,key):
if self.__redis.exists(key):
return self.__redis.get(key)
else:
return ""
def set(self,key,value):
self.__redis.set(key,value)
#示例:用户登录
#业务过程如下:
#输入用户名、密码
#密码加密
#判断redis中是否记录了用户名,如果有则成功
#如果redis中没有用户名,则到mysql中查询
#从mysql中查询成功后,将用户名记录到redis中
from t2 import RedisHelper
from t3 import MysqlHelper
import hashlib
name=raw_input("请输入用户名:")
pwd=raw_input("请输入密码:")
sha1=hashlib.sha1()
sha1.update(pwd)
pwd1=sha1.hexdigest()
try:
redis=RedisHelper()
if redis.get('uname')==name:
print 'ok'
else:
mysql=MysqlHelper('localhost',3306,'test1','root','mysql')
upwd=mysql.get_one('select upwd from userinfos where uname=%s',[name])
if upwd==None:
print '用户名错误'
elif upwd[0]==pwd1:
redis.set('uname', name)
print '登录成功'
else:
print "密码错误"
except Exception,e:
print e.message