redis非关系型数据库的基本类型以及简单操作

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()

猜你喜欢

转载自blog.csdn.net/qq_41772997/article/details/80001931