REDIS01_概述安装key字符串String列表List集合SetHash哈希Zset有序集合配置文件详解

Posted TZ845195485

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了REDIS01_概述安装key字符串String列表List集合SetHash哈希Zset有序集合配置文件详解相关的知识,希望对你有一定的参考价值。

①. Redis的概述

  • ①. redis是一款高性能的开源NOSQL系列的非关系型数据库,Redis是用C语言开发的一个开源的高键值对(key value)数据库,官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s,且Redis通过提供多种键值数据类型来适应不同场景下的存储需求,目前Redis支持的键值数据类型如下:(字符串类型String、哈希类型hash、列表类型list、集合类型set、有序集合类型sortedset)

  • ②. 缓存思想:从缓存中获取数据
    有数据,直接返回
    没有数据,从数据库查询,将数据放入缓存,返回数据

  • ③. 使用场景

  1. 高频次,热门访问的数据,降低数据库IO
  2. 分布式架构,做session共享
  3. 多样的数据结构存储持久化数据
    在这里插入图片描述
  • ④. Redis默认端口6379的由来(Alessia Merz)
    在这里插入图片描述

  • ⑤. 默认16个数据库,类似数组下标从0开始,初始默认使用0号库
    使用命令 select dbid来切换数据库。如: select 8
    统一密码管理,所有库同样密码。
    dbsize查看当前数据库的key的数量
    flushdb清空当前库
    flushall通杀全部库
    在这里插入图片描述

②. Redis6的安装

  1. redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何
  2. redis-check-aof:修复有问题的AOF文件,rdb和aof后面讲
  3. redis-check-dump:修复有问题的dump.rdb文件
  4. redis-sentinel:Redis集群使用
  5. redis-server:Redis服务器启动命令
  6. redis-cli:客户端,操作入口

在这里插入图片描述

  • ④. 由于我们的服务器在青牛云上,对端口进行了映射处理,这里的redis的端口也在配置文件中修改成了9736,我们在进入redis客户端的时候要使用redis-cli -p 9736

在这里插入图片描述

③. 常用五大数据类型

①. Redis键(key)

命令解释
keys *查看当前库所有key (匹配:keys *1)
exists key判断某个key是否存在
type key查看你的key是什么类型
exists key判断某个key是否存在
del key根据value选择非阻塞删除
unlink key判断某个key是否存在
仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作
expire key 1010秒钟:为给定的key设置过期时间
ttl key查看还有多少秒过期,-1表示永不过期,-2表示已过期
select命令切换数据库
dbsize查看当前数据库的key的数量
flushdb清空当前库
flushall通杀全部库

②. 字符串类型 String

  • ①. String是Redis最基本的类型,一个key对应一个value。

  • ②. String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象

  • ③. String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
    String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList

  • ④. 存储( set key value) 获取(get key) 删除(del key)

127.0.0.1:9736> keys *
(empty array)
127.0.0.1:9736> set name TANGZHI
OK
127.0.0.1:9736> get name
"TANGZHI"
127.0.0.1:9736> del name
(integer) 1
127.0.0.1:9736> get name
(nil)
  • ⑤. 其他关于String的操作指令
指令解释
append key value将给定的value 追加到原值的末尾
strlen key获得值的长度
setnx key value只有在key不存在时,设置key的值(分布式锁)
incr key将 key 中储存的数字值增1,只能对数字值操作,如果为空,新增值为1
decr key将 key 中储存的数字值减1,只能对数字值操作,如果为空,新增值为-1
incrby / decrby key 步长将key中储存的数字值增减。自定义步长
mset key1 value1 key2 value2同时设置一个或多个 key-value对
mget key1 key2 key3同时获取一个或多个value
msetnx key1 value1 key2 value2同时设置一个或多个key-value,当且仅当所有给定key都不存在,才会执行成功
getrange key 起始位置 结束位置获得值的范围,类似java中的substring,前包,后包
setrange key 起始位置 value用 value 覆写key所储存的字符串值,从起始位置开始(索引从0开始)。
setex key 过期时间 value设置键值的同时,设置过期时间,单位秒
getset key value以新换旧,设置了新值同时获得旧值
127.0.0.1:9736> set age 24 
OK
127.0.0.1:9736> incr age
(integer) 25
127.0.0.1:9736> get age
"25"
127.0.0.1:9736> decr age
(integer) 24
127.0.0.1:9736> get age
"24"
127.0.0.1:9736> incrby age 10
(integer) 34
127.0.0.1:9736> decrby age 10
(integer) 24
127.0.0.1:9736> get age
"24"

③. 列表 list

  • ①. 列表list是一个单键多值的
    Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
    它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差
    在这里插入图片描述

  • ②. 常用命令 插入、删除、获取

指令解释
lpush key value将元素加入列表左边
rpush key value将元素加入列表右边
lpop key删除列表最左边的元素,并将元素返回
rpop key删除列表最右边的元素,并将元素返回
lrang key start end(0 -1)按照索引下标获得元素(从左到右)
-1右边第一个,(0-1表示获取所有)
rpoplpush key1 key2从key1列表右边吐出一个值,插到key2列表左边
lindex key index按照索引下标获得元素(从左到右)
llen key获得列表长度
127.0.0.1:9736> lpush mylist a
(integer) 1
127.0.0.1:9736> lpush mylist b
(integer) 2
127.0.0.1:9736> lpush mylist c
(integer) 3
127.0.0.1:9736> rpush mylist d
(integer) 4
127.0.0.1:9736> rpush mylist e
(integer) 5
127.0.0.1:9736> rpush mylist f
(integer) 6
127.0.0.1:9736> lrange mylist 0 -1
1) "c"
2) "b"
3) "a"
4) "d"
5) "e"
6) "f"
127.0.0.1:9736> rpop mylist 
"f"
127.0.0.1:9736> lrange mylist 0 -1
1) "b"
2) "a"
3) "d"
4) "e"
127.0.0.1:9736> 
  • ③. List的数据结构为快速链表quickList
    首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。
    它将所有的元素紧挨着一起存储,分配的是一块连续的内存
    当数据量比较多的时候才会改成quicklist

在这里插入图片描述

④. 集合 Set

  • ①. set是可以自动排重的,不允许元素重复
    Set数据结构是dict字典,字典是用哈希表实现的

  • ②. 常用命令

指令解释
sadd key value1 value2将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
smembers key取出该集合的所有值
srem key value1 value2 …删除集合中的某个元素
sismember keyvalue判断集合key是否为含有该value值,有1,没有0
scard key返回该集合的元素个数
spop key随机从该集合中吐出一个值
srandmember key n随机从该集合中取出n个值。不会从集合中删除
smove source destination value把集合中一个值从一个集合移动到另一个集合
sinter key1 key2返回两个集合的交集元素
sunion key1 key2返回两个集合的并集元素
sdiff key1 key2返回两个集合的差集元素(key1中的,不包含key2中的)
127.0.0.1:9736> sadd myset a
(integer) 1
127.0.0.1:9736> sadd myset a
(integer) 0
127.0.0.1:9736> smembers myset 
1) "a"
127.0.0.1:9736> srem myset a
(integer) 1
127.0.0.1:9736> smembers myset 
(empty array)
127.0.0.1:9736> keys *
(empty array)
127.0.0.1:9736> 

⑤. 哈希 hash

  • ①. Hash类型对应的数据结构是两种: ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable (Map<String,Map<Object,Obje ct>>)

  • ②. 常用命令

指令解释
HSET key field value一次设置一个字段值
HGET key field一次获取一个字段值
hgetall key获取所有字段值
hdel删除一个key
HMSET key field value [field value …]一次设置多个字段值
HMGET key field [field …]一次获取多个字段值
hlen获取某个key内的全部数量
hkeys key列出该hash集合的所有field
hvals key列出该hash集合的所有value
hincrby key field increment为哈希表 key 中的域field的值加上增量 1 -1
hsetnx key field value将哈希表 key 中的域field的值设置为value,当且仅当域field不存在
127.0.0.1:9736> hset myUser username TANGZHI
(integer) 1
127.0.0.1:9736> hset myUser password 123456
(integer) 1
127.0.0.1:9736> hget myUser username
"TANGZHI"
127.0.0.1:9736> hget myUser password
"123456"
127.0.0.1:9736> hgetall myUser
1) "username"
2) "TANGZHI"
3) "password"
4) "123456"
127.0.0.1:9736> hdel myUser username
(integer) 1
127.0.0.1:9736> hgetall myUser
1) "password"
2) "123456"
127.0.0.1:9736> 

⑥. 有序集合 Zset

  • ①.Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了

  • ②. 常用命令

指令解释
zadd key score1 value1 score2 value2…将一个或多个member元素及其score值加入到有序集key当中
zrange key start stop[WITHSCORES]返回有序集key中,下标在startstop之间的元素
带WITHSCORES,可以让分数一起和值返回到结果集
zrem key value删除该集合下,指定值的元素
zrangebyscore key min max[withscores][limitoffsetcount]返回有序集key中,所有score值介于min和max之间(包括等于min或max)的成员。有序集成员按score值递增(从小到大)次序排列
zrevrangebyscore key max min[withscores][limitoffsetcount]同上,改为从大到小排列
zincrby key increment value为元素的score加上增量
zcount key min max统计该集合,分数区间内的元素个数
zrank key value返回该值在集合中的排名,从0开始
127.0.0.1:9736> zadd myzset 1 mysql
(integer) 1
127.0.0.1:9736> zadd myzset 2 redis
(integer) 1
127.0.0.1:9736> zadd myzset 3 java
(integer) 1
127.0.0.1:9736> zadd myzset 3 spring
(integer) 1
127.0.0.1:9736> zrange myzset 0 -1
1) "mysql"
2) "redis"
3) "java"
4) "spring"
127.0.0.1:9736> zrem myzset spring
(integer) 1
127.0.0.1:9736> zrange myzset 0 -1
1) "mysql"
2) "redis"
3) "java"
127.0.0.1:9736> 
  • ③. 如何利用zset实现一个文章访问量的排行榜?
127.0.0.1:9736> zrange tops 0 -1 withscores 
1) "java"
2) "100"
3) "mysql"
4) "200"
127.0.0.1:9736> zrevrangebyscore tops   300 100 
1) "mysql"
2) "java"
127.0.0.1:9736> zrevrange tops 0 -1
1) "mysql"
2) "java"

④. 配置文件详解

  • ①. 计量单位说明
    大小写不敏感
    在这里插入图片描述
  • ②. include
    类似jsp中的include,多实例的情况可以把公用的配置文件提取出来
    在这里插入图片描述
  • ③. ip地址的绑定(bind)
  1. 默认情况bind=127.0.0.1只能接受本机的访问请求
  2. 不写的情况下,无限制接受任何ip地址的访问
  3. 生产环境肯定要写你应用服务器的地址
  4. 如果开启了protected-mode,那么在没有设定bind ip且没有设密码的情况下,Redis只允许接受本机的相应
  • ④. tcp-backlog
  1. 可以理解是一个请求到达后至到接受进程处理前的队列
  2. backlog队列总和=未完成三次握手队列 + 已经完成三次握手队列
  3. 高并发环境tcp-backlog 设置值跟超时时限内的Redis吞吐量决定
  • ⑤. timeout
    (一个空闲的客户端维持多少秒会关闭,0为永不关闭)

  • ⑥. TCP keepalive
    对访问客户端的一种心跳检测,每个n秒检测一次。
    官方推荐设为60秒

  • ⑦. daemonize 是否为后台进程

  • ⑧. log level

  1. 四个级别根据使用阶段来选择,生产环境选择notice或者warning
  2. 级别越高,查询出来的信息越少
  • ⑨. database:设定库的数量默认16

  • ⑩. requirepass 设置密码

# requirepass 123456
  • ⑩①. maxclient 最大客户端连接数

  • ⑩②. maxmemory
    设置Redis可以使用的内存量。一旦到达内存使用上限,Redis将会试图移除内部数据,移除规则可以通过maxmemory-policy来指定。如果Redis无法根据移除规则来移除内存中的数据,或者设置了"不允许移除",那么Redis则会针对那些需要申请内存的指令返回错误信息,比如SET、LPUSH等

  • ⑩③. Maxmemory-policy

  1. volatile-lru:使用LRU(最近最少使用)算法移除key,只对设置了过期时间的键
  2. allkeys-lru:使用LRU算法移除key
  3. volatile-random:在过期集合中移除随机的key,只对设置了过期时间的键
  4. allkeys-random:移除随机的key
  5. volatile-ttl(即将过期)移除那些TTL值最小的key,即那些最近要过期的key
  6. noeviction:不进行移除。针对写操作,只是返回错误信息
  • ⑩④. Maxmemory-samples
  1. 设置样本数量,LRU算法和最小TTL算法都并非是精确的算法,而是估算值,所以你可以设置样本的大小
  2. 一般设置3到7的数字,数值越小样本越不准确,但是性能消耗也越小

以上是关于REDIS01_概述安装key字符串String列表List集合SetHash哈希Zset有序集合配置文件详解的主要内容,如果未能解决你的问题,请参考以下文章

REDIS03_概述安装key字符串String列表List集合SetHash哈希Zset有序集合

REDIS03_概述安装key字符串String列表List集合SetHash哈希Zset有序集合持久化策略

Redis01_概述安装keyStringList列表Set集合Hash哈希Zset有序集合配置文件详解

REDIS6_分布式存储极致性能目录

REDIS6_分布式存储极致性能目录

REDIS6_分布式存储极致性能目录