redis
Posted 经理,天台风好大
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis相关的知识,希望对你有一定的参考价值。
一、Nosql与Redis概述
1、Nosql的优势
(1)使用nosql解决cpu与内存压力
(2)使用nosql解决I/O压力
2、Nosql数据库的概述
(1)NoSql= Not Only SQL
(2)采用key-value模式存储
(3)不遵循SQL标准
(4)性能远超过SQL
3、使用场景
(1)数据的高并发读写
(2)海量数据读写
(3)数据可扩展性
4、不适用场景
(1)需要事务的支持
(2)基于sql的结构化查询存储,需要即席查询
5、 Redis概述
(1)开源的key-value系统
(2)支持String、List、Set、zset、hash等数据类型
(3)数据库支持push/pop/add/remove操作
(3)支持不同方式的排序
(4)可写入内存也可以持久化
(5)主从同步功能
二、Redis6安装与使用
1、官网下载:放入liunx对应目录内
2、使用yum安装gcc编译环境
yum -y install gcc gcc-c++ kernel-devel //安装gcc、c++编译器以及内核文件
测试gcc版本,gcc --version
或者 gcc -v
3、解压缩:tar zxvf redis-6.2.5.tar.gz
(我的放在新建的soft目录下了)
4、进入redis-6.2.5 目录执行make命令
cd /soft/redis-6.2.5
make
5、执行安装make install
6、验证安装成功
cd /usr/local/bin
ll
7、相关软件介绍:
- redis-benchmar:性能测试工具
- redis-check-aof:修改有问题的AOF
- redis-check-rdb:修改有问题的rdb文件
- redis-sentinel:Redis的集群使用
- redis-server:Redis服务器集群使用
- redis-cli:客户端,操作入口
8、前台启动(不推荐)
9、后台启动
(1)复制配置文件
cp -r redis.conf /opt/
(2)修改参数配置,将 daemonize no
改为 daemonize yes
,让服务支持在后台启动
[root@localhost redis-6.2.4]# cd /opt/
[root@localhost opt]# vi redis.conf
(3)启动redis
[root@localhost bin]# cd /usr/local/bin/
[root@localhost bin]# redis-server /opt/redis.conf
[root@localhost bin]# ps -ef|grep redis
(4)使用redis-cli测试
10、redis关闭
(1)redis-cli shutdown
(进入终端shutdown也可以)
(2)kill -9 xxx
(进程)
三、常用五大数据类型
(一)Redis key操作
-
查看所有key:
keys *
-
添加 key value:
set
-
判断key是否存在
exists
-
查看key的类型:
type
-
删除key数据:
del
-
选择非阻塞删除:
unlink
(异步删除)
-
设置key的过期时间(秒):
expire
-
查看ttl过期时间(秒):
ttl
(-1永久不过期,-2已经过期)
-
切换数据库:
select
-
查看当前数据库的key数量:
dbsize
-
清空当前库内数据
flushdb
(慎用)
-
通杀所有库内数据
flushall
(慎用)
(二)Redis字符串(String)
-
简介:字符串,一个key对应一个value,是二进制安全的,是Redis最基本数据类型,value最多512M,底层为动态字符串,ArrayList
-
设置值,相同key值覆盖:set
set k1 v100
-
获取值:get
get k1
-
追加值:append,返回总长度
append k1 abcd
-
获取值的长度:strlen
strlen k1
-
当key存在时操作:setnx,设置成功返回1,设置失败返回0
setnx k1 v1
-
将数字类型值+1/-1:incr/decr,原子性操作,不受多线程机制打断。
incr k3
decr k3
-
将key存储的数字值递增x/递减x:incrby/decrby
incrby k3 10
decrby k3 5
-
同时设置一个或多个key-value键值对:mset
mset k1 v1 k2 v2 k3 v3
-
同时获取一个或多个value:mget
mget k1 k2 k3
-
设置多个key-value(当key都不存在时设置成功):msetnx
msetnx k11 v11 k12 v12 k13 v13
msetnx k1 v11 k4 v4
-
获取范围的值(开始-结束):getrange
getrange name 0 3
-
设置范围的值(开始位置-覆盖):setrange,返回总长度
setrange name 3 abc
-
设置key的同时设置过期时间:setex
setex age 20 value30
-
以新值换旧值(显示旧值):getset
getset name jack
(三)Redis列表(List)
-
简介:单键多值的字符串列表,可以按照插入顺序排序,底层为双向链表(zipList(数据少时)->quickList(数据多时))
-
从左边/右边插入一个或多个值:lpush/rpush,返回数组长度
-
按照索引下标(范围)获取元素,从左到右(0表示左边第一个,-1表示右边第一个):lrange
-
从左边或右边取出一个值:lpop/rpop
-
从k1列表右边吐出一个值,插入到v2列表的左边:rpoplpush
-
按照索引下标(单值)获取元素(从左到右):lindex
-
获取列表的长度:llen
llen k1
-
在key对应的value前面/后面插入new value:linset before/after
linsert k1 before "v3" "v31"
linsert k1 after "v2" "v21"
-
从左边删除n个对应的value:lrem
lrem k1 2 "new11"
-
将列表key下标为index的值替换成value:lset
lset k1 1 "new31"
(四)Redis集合(Set)
-
Redis Set是String类型的无序集合,它的底层其实是一个value为null的hash表,value自动排重且无序
-
将一个或多个元素加入到集合key中:sadd,已经存在元素将忽略
sadd k1 v1 v2 v3
-
取出集合中的所有值:smembers
smembers k1
-
判断key集合中是否包含对应的value:sismember,1有0无
sismember k1 v1
-
返回集合中元素个数:scard
scard k1
-
从集合中删除某一个或多个元素:srem
srem k1 v1
-
随机从该集合吐出一个元素:spop
spop k1
-
随机从集合中取出n个值,不会从集合中删除:srandmember
srandmember k1 2
-
把集合中的一个值从一个集合移动到另一个集合:smove
smove k1 k2 v3
-
取两个集合的交集/并集/差集(key1中存在,key2中不存在):sinter/sunoin/sdiff
inter k2 k3
sunion k2 k3
sdiff k2 k3
(五)Redis哈希(Hash)
- 简介:是一个String类型的field和value的映射表,hash适合用来存储对象。类似java中Map<String,Object>,底层为zipList(数据量少)或hashtable(数据量较多)
- 向hash内添加数据(key-field-value):hset
hset user:1001 id 1
hset user:1001 name zhangsan
- 从集合中取出数据(key-field):hget
hget user:1001 id
hget user:1001 name
- 批量添加数据:hmet
hmset user:1002 id 2 name lisi age 30
- 判断哈希表key中,field是否存在:hexists,1有0无
hexists user:1002 id
hexists user:1002 name
hexists user:1002 gender
- 查看哈希表中所有field:hkeys
hkeys user:1002
- 查看哈希表内所有value:hvals
hvals user:1002
- 对应的key、field的值增量+1:hincrby
hincrby user:1002 age 2
- 添加数据,仅当field不存在时:hsetnx
hsetnx user:1002 age 40
hsetnx user:1002 gender 1
(六)Redis有序集合(Zset)
- 简介:有序的,类似set,没有重复元素,关联了score并可以进行排序,底层架构类似Map<String,value>,Zset底层为hash以及跳跃表
- 将一个或多个元素以及score加入到有序集合key中:zadd
clear
zadd topn 200 java 300 c++ 400 mysql 500 php
- 取出返回有序集合key中,下标在
<start><stop>
之间:zrange,自动按照score排序,[withscores]
可以返回评分
zrange topn 0 -1
zrange topn 0 -1 withscores
- 取出score值介于min和max之间的成员,按照score从小到大排序:
zrangebyscore
<key>
<min>
<max>
[withscores]
[limit offset count]
zrangebyscore topn 300 500 withscores
zrevngebyscore <key><max><min>[withscores][limit offset count]
- 为元素score加上增量:
zincrby<key><increment><value>
zincrby topn 50 java
- 删除该集合中下,指定元素的值:
zrem<key><value>
zrem topn php
- 统计该集合,分数区间内的元素个数:
zcount<key><min><max>
zcount topn 200 300
- 返回该值在集合中的排名,从0开始:
zrank<key><value>
zrank topn c++
四、Redis6配置文件详解
1、units单位:
只支持bytes,支持bit,不区分大小写
以上是关于redis的主要内容,如果未能解决你的问题,请参考以下文章