2018.01.19**************************************************************
author: wills
原子性
一致性
隔离性
持久性
redis有五大类型 sting hash list set zset
set p 1 设置p的值为1
get p 获取p的值
incr p 整数p的值增加1
decr p 整数p的值减少1
redis相关 REmote Dictionary Server
增
1. set mykey “test” 为键mykey设置新值,并覆盖原有值
2. getset mcounter 0 先取值mcounter的值,再给mcounter赋值,取得值是mcounter之前的值
3. setex mykey 10 “hello” 设置mykey的过期时间为10s,在存活时间内可以取mykey的值,过期后mykey不在存在
4. setnx mykey “hello” 若该键不存在,则为该键设置新值
删
1. del mykey 删除已有键
改
1.append mykey “hello” 若该键不存在,返回当前value的长度,若存在则返回追加后的长度
2. incr mykey 如果mykey的值是整数则其值增加1,否则出错
3. decr mykey 如果mykey的值是整数其值减一,否则报错
4. decrby mykey 3 如果mykey的值为整数则其值 - 3
5. setrange mykey 20 dd 把mykey中第21和22
查
1. exists mykey 判断mykey这个键是否存在,存在返回1,不存在返回0
2. get mykey 获取mykey对应的值
3. strlen mykey 查看mykey的长度
4. ttl mykey 查看mykey的存活时间,一直存在则为-1,不存在-2 ,有存在时间则返回剩余存在时间
5. mget key1 key2 key3 批量的获取键
6. 查看数据类型 type p
下面是一个我用python模拟账号登录的操作,输入的账号和密码先和非关系型数据库redis里面的数据进行,当比较结果匹配时直接显示登录成功,如果不匹配,那么再去关系型数据集mysql里面login这个存储用户名和密码的表里查找,看有没有匹配,如果匹配成功则返回登录成功,并且修改redis对应的值,如果还是没有匹配那么返回错误,代码如下。
# 导入sys模块,用于接收命令行传入的参数,模拟用户在网页或者app上输入的账号密码
import sys
# 导入pymysql,redis模块用于连接相关数据库
import pymysql
import redis
# 定义连接mysql的函数
def con_mysql(sql):
# 连接的数据库是我自己放在阿里云服务器上的,端口是默认的3306
# db表示我的数据放在test1数据库里面
db = pymysql.connect(
host='120.79.131.105',
user='root',
passwd='13579',
db='test1',
port=3306,
charset='utf8')
# 创建一块缓存区,保存sql语句执行后获得的结果
cursor = db.cursor()
# 执行sql语句,sql语句通过参数传入
cursor.execute(sql)
data = cursor.fetchall()
db.close()
# 返回值会执行sql语句返回的结果
return data
# 定义连接redis函数
def con_redis():
return redis.Redis(host='120.79.131.105', password='123456', port=6379)
def main():
# 首先获取传入的参数用户名和密码
username = sys.argv[1]
passwd = sys.argv[2]
# 连接redis,获得一个对象r,用r对redis里面的数据进行相应的操作
r = con_redis()
# 查找redis中名为user的哈希表,里面存放着所有的用户名和密码
r_names = r.hkeys('user')
flag = False
# user表的键表示用户名,对其进行遍历,看看有没有和输入用户名相同的,如果有继续比较相应的密码,如果没有则进入下一步,flag标签在这里用来进行特殊条件判断
# flag初始值=2,一旦进入循环,其值变为false,
for name in r_names:
name = name.decode('utf8')
# 如果用户名存在,再查找相应的密码
if username == name:
r_passwd = r.hget('user', username).decode('utf8')
if r_passwd == passwd:
flag = True
print('登录成功')
# 如果找到对应的账号密码输出登录成功,并且跳出循环,并且将flag的值置为True
break
# 如果在redis没有找到对应账号密码,再去mysql里面寻找
if not flag:
# sql表示数据库查询语句
sql = 'select * from login;'
mysql = con_mysql(sql)
f = True
for user in mysql:
if user[0] == username and user[1] == int(passwd):
r.hset('user', username, passwd)
print('登录成功,刷新redis')
f = False
break
if f:
print('用户名或密码错误')
# 这里表示在数据库也没有找到对应的账号与密码
else:
print('用户名或密码错误')
if __name__ == '__main__':
main()