Redis操作总结

Redis

redis是一款高性能的NOSQL系列的非关系型数据库

关系型数据库与非关系型数据库

关系型数据库:Oracle,Microsoft SQL Server,MySQL等
非关系型数据库:Redis, Amazon DynamoDB, Memcached等

优缺点:
关系型数据库优点:
1、易于维护:都是使用表结构,格式一致;每个表的操作方式都差不多
2、使用方便:SQL语言通用,可用于复杂查询;学习完mysql,就可以大概使用Oracle
3、复杂查询:可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。
4、事务支持使得对于安全性能很高的数据访问要求得以实现。
关系型数据库缺点:
1、存储信息保存在硬盘文件中,读写的性能差,对于大量的数据显得更为突出
2、对于硬盘I/O要求高,做大量并发操作时,要求很高
3、性能欠佳:在关系型数据库中,导致性能欠佳的最主要原因是多表的关联查询,以及复杂的数据分析类型的复杂SQL报表查询。

非关系型数据库优点:
1、成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。
2、查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。
3、存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。
4、扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
非关系型数据库缺点:
1、维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。
2、不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。
3、不提供关系型数据库对事务的处理。

总结
关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,
让NoSQL数据库对关系型数据库的不足进行弥补。
一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据

Redis介绍

Redis是一种高级的key:value存储系统,Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s ,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:

  1. 字符串类型 string
  2. 哈希类型 hash
  3. 列表类型 list
  4. 集合类型 set
  5. 有序集合类型 sortedset

redis的应用场景
• 缓存(数据查询、短连接、新闻内容、商品内容等等)
• 聊天室的在线好友列表
• 任务队列。(秒杀、抢购、12306等等)
• 应用排行榜
• 网站访问统计
• 数据过期处理(可以精确到毫秒
• 分布式集群架构中的session分离

下载安装 (到中文网下载快,还有相关教程)

  1. 官网:https://redis.io
  2. 中文网:http://www.redis.net.cn/
  3. 解压直接可以使用:
  • redis.windows.conf:配置文件
  • redis-cli.exe:redis的客户端
  • redis-server.exe:redis服务器端

Redis操作

  1. redis的数据结构:
  • redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构
  • value的数据结构:
  1. 字符串类型 string
  2. 哈希类型 hash : map格式
  3. 列表类型 list : linkedlist格式。支持重复元素
  4. 集合类型 set : 不允许重复元素
  5. 有序集合类型 sortedset:不允许重复元素,且元素有顺序

开启redis操作很简单找到redis的下载目录先打开redis-server.exe
然后打开redis-cli.exe就可以进行操作

通用操作

先说一下通用操作,五个数据结构都可以使用
1、keys * : 查询所有的键
2、type key : 获取键对应的value的类型
3、del key :删除指定的key value
4、flushall :删除所有数据库中的key
5、flushdb :删除当前数据库中的所有Key

字符串String 类型操作
  1. 存储操作: set key value
    存储成功后会显示OK
127.0.0.1:6379> set name haha
  1. 获取操作: get key
    获取后直接显示key对应的value值,"haha"为显示的对应值
127.0.0.1:6379> get name
"haha"
  1. 删除操作: del key
127.0.0.1:6379> del name
(integer) 1
哈希hash类型

跟String的操作比,在前面加了个h表示hash

  1. 存储操作: hset key field value
    这里的key就相当于代表一个map,而里面存储的是map的键和值 ,key为map名 ,field为map中的一个键 , value就是对应值
127.0.0.1:6379> hset hashh name zhangsan
(integer) 1
127.0.0.1:6379> hset hashh age 16
(integer) 1
  1. 获取操作: hget key field: 获取指定的field对应的值
127.0.0.1:6379> hget hashh name
"zhangsan"
127.0.0.1:6379> hget hashh age
"16"

       hgetall key 获取所有的field和value

127.0.0.1:6379> hgetall hashh
1) "name"
2) "zhangsan"
3) "age"
4) "16"
  1. 删除操作: hdel key field 删除指定的field,可以指定多个
127.0.0.1:6379> hdel hashh name age
(integer) 2
列表List 类型

可以添加一个元素到列表的头部(左边)或者尾部(右边)相当于双端链表

  1. 存储操作:
    ①. lpush key value: 将元素加入列表左边
    ②. rpush key value: 将元素加入列表右边
127.0.0.1:6379> lpush Listt a
(integer) 1
127.0.0.1:6379> lpush Listt b
(integer) 2
127.0.0.1:6379> rpush Listt c
(integer) 3
  1. 获取操作: lrange key start end :范围获取
    这里lrange的l不是表示left ,没有rrange这个东西
    这里的坐标0表最开始 -1表示倒数第一个位置.
    三个元素坐标为 0 1 2 也可以为 -3 -2 -1
127.0.0.1:6379> lrange Listt 0 -1
1) "b"
2) "a"
3) "c"
  1. 删除操作:
    lpop key: 删除列表最左边的元素,并将元素返回
    rpop key: 删除列表最右边的元素,并将元素返回
127.0.0.1:6379> lpop Listt
"b"
127.0.0.1:6379> rpop Listt
"c"
集合set 类型

不允许存在重复元素

  1. 存储操作:sadd key value
    第二次存储a就失败了
127.0.0.1:6379> sadd sett a
(integer) 1
127.0.0.1:6379> sadd sett a
(integer) 0
127.0.0.1:6379> sadd sett b
(integer) 1
  1. 获取操作: smembers key:获取set集合中所有元素
    因为是集合set,所以保存并没有顺序
127.0.0.1:6379> smembers sett
1) "a"
2) "b"
127.0.0.1:6379> sadd sett aa
(integer) 1
127.0.0.1:6379> sadd sett ab
(integer) 1
127.0.0.1:6379> sadd sett cc dd
(integer) 2
127.0.0.1:6379> smembers sett
1) "a"
2) "b"
3) "aa"
4) "cc"
5) "dd"
6) "ab"
  1. 删除操作: srem key value:删除set集合中的某个元素
    rem应该是remove
127.0.0.1:6379> srem sett a
(integer) 1
有序集合sortedset类型

不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

  1. 存储操作:zadd key score value
    这个z就是z比较特殊,Redis的默认端口号6379的来源也很奇特,因为作者喜欢的一个叫Merz的女明星,其名字在手机上输入正好对应号码6379,索性就把Redis的默认端口叫6379了
    参数score为所带的数值,之后的存储会根据该值来定义顺序
    参数value为key的值
127.0.0.1:6379> zadd zz 10 zhangsan
(integer) 1
127.0.0.1:6379> zadd zz 20 lisi
(integer) 1
127.0.0.1:6379> zadd zz 90 wangwu
(integer) 1
  1. 获取操作:
    从小到大 zrange key start end [withscores]
    其中[withscores]代表可加也可以不加.有序集成员按 score 值递增(从小到大)次序排列
    加withscores在最后表示,显示时也显示key对应的score
127.0.0.1:6379> zrange zz 0 -1
1) "zhangsan"
2) "lisi"
3) "wangwu"
127.0.0.1:6379> zrange zz 0 -1 withscores
1) "zhangsan"
2) "10"
3) "lisi"
4) "20"
5) "wangwu"
6) "90"

从大到小 zrevrange key start end [withscores]

127.0.0.1:6379> zrevrange zz 0 -1 withscores
1) "wangwu"
2) "90"
3) "lisi"
4) "20"
5) "zhangsan"
6) "10"
  1. 删除操作: zrem key value

rem应该是remove

127.0.0.1:6379> zrem zz lisi
(integer) 1

持久化问题

  1. redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
  2. redis持久化机制:
    ①. RDB:默认方式,不需要进行配置,默认就使用这种机制
     * 在一定的间隔时间中,检测key的变化情况,然后持久化数据

编辑redis.windwos.conf文件大概在194行


# after 900 sec (15 min) if at least 1 key changed
# 每900s如果有1个key改变就持久化数据
save 900 1
# after 300 sec (5 min) if at least 10 keys changed
# 每300s如果有10个key改变就持久化数据
save 300 10
# after 60 sec if at least 10000 keys changed
# 每60s如果有10000个key改变就持久化数据
save 60 10000

重新启动redis服务器,找到redis.windwos.conf文件并指定配置文件名称
win10系统教大家一个快速在当前文件夹快速打开cmd命令行
找到当前文件夹,直接在这个位置输入cmd回车就可以进入了
在这里插入图片描述在这里插入图片描述重启redis服务器输入redis-server.exe redis.windows.conf回车
在这里插入图片描述

②.AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
编辑redis.windwos.conf文件大概在609行
appendonly no(关闭aof) --> appendonly yes (开启aof)

# appendfsync always : 每一次操作都进行持久化
appendfsync everysec : 每隔一秒进行一次持久化
# appendfsync no : 不进行持久化

重新启动redis服务器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值