Redis

数据库类型

关系型数据库(RMDBS)

数据库中表与表的数据之间存在某种关联的内在关系--关系型数据库

典型 : Mysql/MariaDB、PostgreSQL、Oracle/SQLServer、DB2、Access、SQLlite3

特点:

        1.全部使用SQL(结构化查询语言) 进行数据库操作

        2.都存在主外键关系,表,等等关系特征

非关系数据库(NoSQL)

NoSQL: not only sql,泛指非关系型数据库,不使用SQL语句进行数据操作的数据库。

典型: Redis、MongoDB、hbase、Hadoop、elasticsearch、图形数据库。。。

特点:

        1. 每一款都不一样,用途不一致,功能不一致,各有各的操作方式

        2. 基本不支持主外键关系,也没有事物概念。(MongoDB号称最接近关系型数据库,所以包含这些)

Redis

简介

Redis(Remote Dictionary Server, 远程字典服务) 是一个高性能的ket-value数据格式的内存数据库,是NoSQL数据库。redis主要是为了替代早期的Memcache缓存系统。

支持数据持久化(基于RDB和AOF,注:数据持久化时将数据存放在文件中,每次启动redis之后会先将文件中数据加载到内存),经常用来做缓存、数据共享、购物车、消息队列、计数器、限流等。

redis的官方只提供了linux版本,windows系统的redis是微软团队根据官方linux版本高仿的

官网原版:Redis

中文官网:CRUG网站

redis下载和安装

下载地址: Releases · microsoftarchive/redis · GitHuba

windows安装

 

 

 使用以下命令启动redis服务端

redis-server C:/tool/redis/redis.windows.conf

                

 关闭上面cmd窗口就关闭了redis服务

redis作为windows服务启动方式

redis-server --service-install redis.windows.conf

启动服务 : redis-server --service-start

停止服务: redis-server --service-stop

连接redis服务器,可在终端使用 redis-cli

ubuntu安装

        安装命令 : sudo apt-get install -y redis-server

        卸载命令 : sudo apt-get purge --auto-remove redis-server

        关闭命令 :    sudo service redis-server stop

        开启命令 : sudo service redis-server start

        重启命令 : sudo service redis-server restart

        配置文件 : /etc/redis/redis.conf

redis配置

        sudo cat /etc/redis/redis.conf

redis安装成功后,windows下的配置文件保存在软件 安装目录下,mac和linux,则默认安装/etc/redis/redis.conf

redis的核心配置选项

-- 绑定IP : 如果需要远程访问,可将此注释,或绑定1个真实的ip,默认  bind  127.0.0.1

-- 端口  : 默认6379  ,port 6379

-- 是否以守护进程运行[windows下需要设置]

        守护进程对于Redis正常运行至关重要,可以实时检测Redis服务状态,有助于提高服务的稳定性,减少服务中断。

        如果Redis数据经常需要持久化,需要设置守护进程

        设置为yes表示守护进程,设置为no表示非守护进程,推荐设置为yes  :daemonize yes

-- 数据文件名 : dbfilename dump.rdb

-- 数据库数据文件的存储路径 : dir  /var/lib/redis

-- 日志文件所载目录   logfile  /var/log/redis/redis-server.log

-- 进程ID文件 pidfile  /var/run/redis/redis-server.pid

-- 数据库 ,默认16个,0-15    database 16

-- redis登录密码,生产阶段开始打开,开发阶段避免麻烦,一般都注释。 requirepass foobared

注意:开启了以后,redis-cli终端下使用 auth 密码来认证登录。

-- 主从复制,类似于双机备份   slaveof

redis使用

redis是一款基于CS架构的数据库,redis有客户端,也有服务端

其中,客户端可以使用python等编程语言,也可以终端下使用命令行工具管理redis数据库,甚至可以安装一些别人开发的界面工具,例如RDM

redis-cli客户端连接服务器:

        redis-cli -h `redis服务器ip` -p `redis服务器port`

redis数据类型

        redis就是一个全局的大字典,key就是数据的唯一标识符。根据key对应的值不同,可以划分为5个基本数据类型。

string类型:key:value

        字符串类型,是redis中最为基础的数据存储类型,它在 redis中是二进制安全的,也就是byte类型。单个数据的最大容量是512M。

hash类型:

        哈希类型,用于存储对象,对象的结果为键值对。key、域、值的类型都为string。域在同一个hash中是一位的

key:{域(属性) : 值, 域 : 值,...}

list类型:

        列表类型,他的子成员类型为string。 key : [ 值1, 值2, 值3 ....]

set类型:

        无序集合,他的子成员类型为string类型,元素唯一不重复,没有修改操作。

        key : {值1, 值2, 值3, ...}

zset类型(sortedSet):

        有序集合,他的子成员类型为string类型,元素唯一不重复,没有修改操作

        key : {

                值1 权重值1(数字);

                值2 权重值2(数字);

                值3 权重值3(数字);

                ...

                值n 权重值n(数字);

                }

redis操作

string类型

如果设置的键不存在则为添加,如果设置的键已经存在则修改

设置键值

        set key value

        set name xiaoming

设置一个键,当键不存在时才能设置成功,用于一个变量只能被设置一次

        setnx key value

一般用于给数据加锁

设置键值过期时间

redis中可以对一切的数据进行设置有效期 --- 以秒为单位

        setex key second value

        setex name 20 xiaoming

关于设置保存数据的有效期

setex 添加保存数据到redis,同时设置有效期,格式: setex key time value

设置多个键值

        mset key1 value1 key2 value2 ...

        mset a1 python a2 go a3 java

字符串拼接值

        append key value

        set name python

        append name go

        get name  --> pythongo

根据键获取值

根据键获取值,如果不存在返回nil,相当于python得None

        get key

根据多个键获取值

        mget  key1 key2 ...

自增自减

        set id 1

        incr id    # 相当于id+1

        decr id  # 相当于id-1   可以为负数

获取字符串长度

        set name xiaoming

        strlen name   # 8

key的操作 --针对任何数据类型通用命令

查找键

参数支持简单的正则表达式

        keys pattern

查看所有键

        keys *

        keys *a*    -->  查看含有·a·的键        

        keys *a     -->  查看以a结尾的键

        keys a*     -->  查看以a开头的键

判断键是否存在

存在返回1,不存在返回0

        exists key1        exists name

查看键的数据类型

        type key      type name  --> string

删除键以及键对应的值

        del key1 key2 ...

查看键的有效期

        ttl key    #  结果是以秒为单位的整数

        # -1 表示永不过期 , -2 表示当前数据已过期,查看一个不存在的数据有效期是-2

设置key的有效期

给已存在的数据设置有效期。redis所有数据都可以通过expire设置

        expire key seconds

清空所有键 -- 慎用

        flushall

key重命名

        rename oldkey newkey          rename name username

select 切换数据库  select 0-15

auth认证

   在配置中,如果配置了requirepass登录密码,则进入redis-cli的操作之前,必须进行登录验证。

   注意 :

        1.  在redis6.0 以后,redis新增了用户和密码登录,可以选择使用,也可以选择不使用,默认不使用

        2.  在redis6.0之前,redis只可以在配置文件中,选择开启密码登录,也可以关闭,默认关闭

                redis-cli

                auth <密码>

hash

结构 :  键key :{  域field : 值value }

设置指定键的属性/域

设置指定键的单个属性

        hset key field value        hset user name xiaoming

设置指定键的多个属性

        hmset key field1 value1 field2 value2...

        hmset user name kobe age 24 sex 1

获取指定键的域/属性的值

获取指定键所有的域/属性

        hkeys key      hkeys user

获取指定键的单个域/属性的值

        hget key field       hget user name

获取指定键的多个域/属性的值

        hmget key field1 field2 ...  hmget user name age

获取指定键的所有值

        hvals key

获取指定键的所有域值对

        hgetall user

删除指定键的域或者属性

        hdel key field1 field2    hdel user age

注意 : 当键中的hash数据没有任何属性,则键会被redis删除

判断指定属性/域是否存在于当前键对应的hash中

        hexists key field      1代表存在、0代表不存在

属性值自增自减

        hincrby  key field number 

        hincrby user age 5

        hincrby user age -2

list

列表的子成员类型为string

添加子成员

        lpush key value1 value2 ...     在左侧添加一条或多条数据

        rpush key value1 value2 ...     在右侧添加一条或多条数据

        linsert key before 指定元素  value1 value2 ...   在指定元素的左边(前面)/插入一条或多条数据

        linsert key after    指定元素  value1  value2 ...  在指定元素的右边(后面)/插入一条或多条数据

注意 :当列表中如果存在多个成员值一致的情况下,默认只识别第一个

设置指定索引位置成员的值

        lset key index value      lset brother  4 kobe

        注意 : redis的列表也有索引,从左往右,从0开始,逐一递增,第1个元素为0

                     索引可以是负数,表示尾部开始计数,如`-1`表示最后1个元素

删除指定成员

        lrem key count value

注意 :

        count   表示删除的数量,value表示要删除的成员。该命令默认表示将列表从左侧前count个value的元素移除

        count == 0, 表示删除列表所有值为value的成员

        count > 0 , 表示删除列表左侧开始的前count个value成员

        count < 0 , 表示删除列表右侧开始的前count个value成员

获取列表成员

根据指定的索引获取成员的值

        lindex  index     lindex brother 2      lindex brother -2

移除并获取列表的第一个成员或最后一个成员

        lpop key     lpop brother

        rpop key    

获取列表的切片

        lrange key start stop    lrange brother 0 -1

获取列表长度

        llen key    llen brother

set

无序集合,重点就是去重和无序

添加元素

        sadd key member1 member2  ...       sadd authors  zhangsan lisi

获取集合的所有成员

        smembers key        smembers authors

获取集合长度        

        scard key

随机获取一个或多个元素

        spop key [count]   count为可选参数,不填写则默认一个

删除指定元素

        srem key value     srem authors zhangsan 

交集、差集、并集

        sinter key1 key2 key3 ...     比较多个集合中共同存在的成员

        sdiff key1 key2 key3 ...       比较多个集合中不同的成员

        sunion  key1 key2 key3 ...  合并所有集合的成员,并去重  

zset

有序集合,去重并且根据score权重值来进行排序,score从小到大排列

添加成员

        zadd key score1 member1 score2 member2 score3 member3 ....

设置榜单users,设置成绩和用户名作为users的成员

        zadd users 60 bob 98 meisi 100 kobe

给指定成员增加权重值

        zincrby key score member        zincrby users 10 bob

获取集合长度

        zcard key       zcard users

获取指定成员的权重值

        zscore key member         zscore users kobe

获取指定成员在集合中的排名

        排名从0开始计算

        srank key member    # score从小到大的排名

        zrevrank key member   #  score从大到小的排名

获取user中kobe的分数排名

        srank users kobe           zrevrank users kobe

获取score在指定区间的所有成员数量

        zcount key min max      zcount users 60 70

获取score在指定区间的所有成员

        zrangebyscore key min max    # 按score进行从低往高排序获取指定的score区间     

            zrangebyscore users 60 70

        zrevrangebyscore key min max  # 按score进行从高往低排序获取指定score区间

        zrange key start stop         # 按scoer进行从低往高排序获取指定索引区间  zrange users 0 2

        zrevrange key start stop      # 按scoer进行从高往低排序获取指定索引区间

删除成员

        zrem key member1 member2  ...    zrem users bob

删除指定数量的成员

        zpopmin key [count]     删除指定数量的成员,从最低score开始删除

        zpopmax key [count]    删除指定数量的成员,从最高score开始删除

各种数据类型在开发中的常用业务场景

字符串string

用于保存一些项目中的普通数据,只要键值对的都可以保存,例如保存session,定时记录状态,倒计时。

哈希hash

用于保存项目中的一些对象结构/字典数据,但是不能保存多维的字典,例如,商城的购物车,文章信息,json

列表list

用于保存项目中的列表数据,但是不能保存多维的列表,例如,队列,秒杀,医院的挂号

无序集合set

用于保存项目中的一些不能重复的数据,可以用于过滤,例如,过滤候选人,作者名单

有序集合zset

用于保存项目中一些不能重复,但是需要进行排序的数据,分数排行榜,投票海选

开发中,redis常用的业务场景

数据缓存

分布式数据共享

计数器

限流

位统计(用户打卡、签到)

购物车

消息队列

排行榜单

python中常用的redis模块

 pyredis(同步) : pip install pyredis

 aioredis(异步) : pip install aioredis

python操作redis基本使用

from pyredis import Redis,StrictRedis
redis = StrictRedis("redis:@密码//127.0.0.1:6379/0")
# 设置一个字符串
# 终端命令,set name xioaming
redis.set("name","xiaoming")

# 设置一个指定时间有效的数据
# 终端名:setex name 30 xiaoming
redis.setex("name",30,"xiaoming")

# 设置有一个集合user,成员有:xiaoming,xiaoli
redis.sadd("user","xiaoming","xiaoli")

# 删除集合user的一个成员
redis.srem("user","xiaoming")

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值