前言

环境:centos7 redis-6.2.6.tar.gz(https://redis.io/download)
redis是一种nosql(not only sql)数据库,其存储的是key-value型数据。

启动redis,并登陆

1、启动redis服务
[root@Redis redis-6.2.6]# cd /usr/local/redis-6.2.6/bin/
[root@Redis bin]# ./redis-server  /usr/local/redis-6.2.6/etc/redis.conf        #指定配置文件,启动redis-server
2、命令行redis.cli客户端登陆、
[root@Redis bin]# ./redis.cli -h 192.168.1.1 -p 6379                               #使用redis.cli连接,指定IP端口
192.168.118.130:6379> auth iflytek                                               #使用auth命令来输入密码登陆
OK
192.168.118.130:6379>quit                                                        #退出客户端

基础讲解

1、redis默认有16个数据库,DB index从0开始,即0-15。默认登陆第一个index为0的数据库;默认数据库个数可通过redis.conf配置文件databases 参数修改;
2、redis的命令不区分大小写,但数据有大小写之分,如:I 和i是不同的数据;
3、redis的密码都是统一的,即全部库都是统一的登陆密码,密码在redis.conf配置文件中requirepass参数配置;
4、redis默认端口6379,可在配置文件中修改默认端口。

redis常用命令讲解

redis常用命令官方文档:https://www.redis.net.cn/order/
select index:切换数据库。例如select 1,即切换到库1;
dbseize:查看当前数据库的key数量;
flushdb:清空当前库;
flushall:清空全部库;

redis支持的数据类型:字符串类型、list类型、hash类型、set数据类型、zset数据类型,每种数据类型的命令语法都有所不同。

字符类型

set命令:用于插入数据 格式如下:

set key value [EX seconds | PX milliseconds] [NX|XX] [KEEPTTL]插入的key时无序的。

keys pattern:查看有哪些key,pattern是匹配符。
get key:查看指定key对应的value.
redis不存在所谓的表,不使用关系型数据库的sql来操作数据。
move key db:移动某个key到指定库。
ramdomkey:从当前库随机返回一个key
type key:查看指定key的数据类型
del key:删除指定key
exists key […]:检测指定key是否存在。返回1表示存在,0表示不存在,当有多个参数时,只要其中一个存在就返回1。
expire key seconds:指定某个key的过期时间(计算基数为:秒),过期后keys ke1y就看不到了。
expire key seconds:指定某个key的过期时间(计算基数为:秒),过期后keys ke1就看不到了。
pexpire key milliseconds:指定某个key的过期时间(计算基数为:毫秒),过期后keys ke1就看不到了。
ttl key:查看指定key剩余过期时间,返回值为3类:数字表述剩余过期时间;-1表示永不过期;-2表示已过期。
getrange key start end :获取指定key的value的指定index区间的值,如:set k1 “I am k1”,getrange k1 0 3 返回值为:I am
getset key new_value:设置指定key的新值,返回旧值。
mset key new_value [key1 new_value1…]:批量设置key的新值
mget key1 key2 […]:批量获取指定key的value(get key 只能获取指定的单个key的值)
setrange key index value :修改指定key的值,从index处开始替换成为value(注:index从0开始)
incr key: 指定的key递增加1
decr key: 指定的key递减减1
incrby key increment:指定的key递增加1且指定步长increment,如 incrby k1 10,相当于k1直接加了10个1.
decrby key increment: 指定的key递减减1且指定步长increment,如 incrby k1 10,相当于k1直接减了10个1.
append key value:在指定key后追加value
strlen key:查看指定key的长度
list类型
lpush key element[element…]:左插入
rpush key element[element…]:右插入
lrange key start stop:取出集合的数据,0 -1 表示取出全部数据,如 lrange key 0 -1

lpop key:弹出集合最后一个元素,注意:弹出后集合没有这个元素了。
rpop key:弹出集合第一个元素,注意:弹出后集合没有这个元素了。
llen key:长度
lindxe key index:取出指定索引的元素,lindex k11 2
lrem key conut value:移除从指定方向查找key中与value值匹配的元素,count表示如下:
|count=0:移除集合中与value匹配的元素,如:lrem k11 0 1
|count>0:从集合头开始向尾搜索,移除|count|个与value匹配元素,lrem k12 2 3
|count<0:从集合尾开始向头搜索,移除|count|个与value匹配元素,lrem k12 -2 2
lset key index value:设置集合指定索引的值(索引不能超过集合最大索引)
ltrim key start stop :裁剪指定区间的元素,即只保留指定区间的元素,其他区间的元素将会被移除。
linsert key before|after element new_value:从集合头向后查找匹配的第一个element元素,从其前或其后插入新元素new_value。当无匹配元素时不执行任何操作。如:linsert k12 before “3” “new-3”
rpoplpush key1 key2:将集合key1的最后一个元素移除并将其添加到key2中的开头。
hash类型
hset key field value[field value…]:设置哈希表key中的域field的值设为value,若果key不存在,将创建新的hash表并新建域插入值,如果域field已存在旧值就被新值覆盖。hset key13 id 001 name liming age 12。注意:低版本的redis中此hset命令可能只能设置单个field。
hget key field:获取哈希表中单个指定域的值。hget key13 name
hmset key field value[field value…]:同时设置哈希表多个field和值,高版本的redis此命令与hset相同。
hmget key field [field]:获取指定域的值,与hget的区别在于hmget可获取多个域的值。
hgetall key:获取全部的域和其值
hexists key field:判断哈希表中指定域field是否存在,存在则返回1,不存在返回0.
hsetnx key fiels value:哈希表中添加field和值,添加成功返回1,若已存在该field则不添加,返回0.
hincrby key field increment:指定域中递增,递增增量为increment,如hincrby k13 age 20,则年龄加12岁。
hdel key field:删除哈希表中指定的域。hdel k13 age
hkeys key:显示指定哈希表的全部filed
hvals key: 显示指定哈希表的全部values
hlen key:显示哈希表的长度,其长度为field的个数。
set数据类型
sadd key member [member…]:设置指定key的值,member重复时至保留一个。即set数据无须且数据不重复。
smembers key:获取指定的单个key的全部member
srem key member:删除指定key的某个member。
sismember key menber:判断key的某个member是否存在,存在则返回1,不存在返回0
spop key [count]:从key集合中弹出count个元素
scard key:统计key的个数
zset数据集合

redis.conf配置大全详解

#是否开启redis为守护进程(即后台允许),默认为no
daemonize no/yes
#如果redis为守护进程,则进程的pis将写入这个文件中
/var/run/redis.pid
#指定redis的监听端口,默认为6379
port 6379
#指定redis可以接受来之哪些IP的链接请求,默认是127.0.0.1
bind 127.0.0.1 (0.0.0.0表示允许来之所有的ip链接请求)
#设置超时时间,当客户端闲置多长时间后关闭连接.0表示不启用此功能。
timeout 0
#设置日志级别,redis总共支持四个级别:debug verbose notice warning,默认notice
logleverl notice
debug:很多信息,便于开发测试;
verbose:许多有用的信息,但没有debug基本的信息多;
notice:适当的信息,合适生产环境使用;
warning:只有非常重要的信息
#日志记录方式,默认为标准输出,如果redis为守护进程方式运行,而又没有给出具体的输出目录,则Redis默认为标准输出,则日志将会被发送给/dev/null
logfile “”
#设置数据库的数量,默认16个,客户端连接默认进入数据库0,可用select index来切换数据库
database 16
#指定在多长时间内,有多少次更新操作就将数据同步到数据文件。
save
redis配置默认提供:
save 900 1 表示900秒(15分钟)内至少有1个数据更改就同步
save 300 10 表示300秒(5分钟)内至少有10个数据更改就同步
save 60 1000 表示60秒(1分钟)内至少有1000个数据更改就同步
#指定数据存储到数据库文件是是否压缩数据,默认yes,redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但这会导致数据库文件变得非常的大。
rdbcompression yes
#指定数据库文件名(redis的数据库文件后缀默认为.rdb)
dbfilename dump.rdb
#指定数据库文件的存放位置,默认为当前配置文件的目录下。
dis ./
#设置redis连接密码,如果配置了该连接密码,客户端在连接redis时需要使用auth 命令提供密码进行认证通过才能连接成功。
requirepass manager001
#设置同一时间最大的客户端连接数,默认10000,若不启用该参数,则默认客户端最大连接数为Redis进程可以打开的最大文件描述符数。当达到最大连接数后Redis会关闭新的连接并向客户端发送“max number of clients reached”错误信息。
maxclients 10000
#是否开启syslog功能
syslog-enabled no
#syslog的标识符
syslog-ident redis
#设置Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会尝试清除已到期或即将到期的key,采用以下策略能达到最大内存后Redis不能进行写操作,但可以进行读操作。
maxmemory
#当达到最大内存限制后,新版的Redis提供5中策略来处理
volatile-lur 利用LRU算法移除设置过期时间的key
allkeys-lur 利用LRU算法移除任何key
volatile-lfu
allkeys-lfu
volatile-random 移除过期时间的随机key
allkeys-random 移除过期的全部key
volatile-ttl 移除即将过期的key
noeviction 不移除任何key,只是返回一个写错误(默认选项)

#客户端查看某个配置命令
config get
#客户端查看所有配置命令
config get *

redis的客户端使用命令行的方式连接的话一般不太可视化,还有更可视化的客户端工具,如:redis-desktop-manager.exe、redisplus.exe(需要更改redis.server中的config文件中的bind参数和protected-mode no才能让第三方客户端工具连接的上)
java中连接redis:
Jedis jedis=new Jedis(“192.168.1.100”,6379);
jedis.auth(“manager001”);
system.out.print(jredis.ping()) //输出PONG
jedis.close();
Java中操作Redis一般都有对于Redis命令的方法,如:
jedis.add方法、jedis.zadd方法、jedis.set方法、jedis.mset方法、jedis.select(0);

Redis面试题大全
1、什么是Redis?
Redis(Remote Dictionary Server)是一个使用C语言编写的,开源的,高性能非关系型(NoSQL)的键值对数据库。
2、Redis有哪些数据类型?
string、hash、list、set、zset
3、Redis比memcache有哪些优点?
Redis支持的数据类型比memcache多;Redis存储速度比memcache快;Redis可以做持久化。
4、Redis支持哪几种方式持久化,它们各有什么优缺点?
两种。RDB和AOF。
RDB默认开启,会安装配置文件指定时间将内存中的数据块照到磁盘,创建一个dump.rdb文件,Redis启动时在恢复到内存中。
RDB优势:RDB是Redis数据的一个非常紧凑的文件,它保存Redis在某个时间上的数据集,所以RDB文件非常适合备份。例如你可能希望在最近24小时内每小时归档你的RDB文件,并且每天保存快照30天,这使你可以在发生灾难时轻松恢复数据集的不同版本。RDB非常适合灾难恢复,可以将单个压缩文件传输到远端数据中心。RDB最大限度的提高了Redis的性能,因为Redis父进程为了坚持不懈需要做的唯一工作就是分配一个将完成所有其余工作的子进程,父实例永远不会执行磁盘I/O或类似操作。与AOF相比,RDB允许使用大数据集快速重启。
RDB的缺点:如果你需要在Redis停止工作(例如断电后)时将数据丢失的可能性降到最低,则RDB并不好。。。。。。。。。。。。。。。。。。。。。。
AOF优点:使用AOF更持久,米可以使用不同的fsync(每秒fsync)

AOF以日志的形式记录Redis每个写操作(读操作不记录)的命令,这样Redis重启时会根据记录文件从头到尾全部执行一遍命令以完成数据的恢复工作。
5、修改配置文件不重启会实时生效吗?
使用vim打开修改配置文件是需要重启Redis服务的,但如果使用命令config set来修改配置文件,是不需要重启Redis服务的,此命令修改会实时生效。
6、什么是缓存穿透、缓存雪崩以及如何解决?

7、解释一下Redis的事务。

Redis常用命令、数据类型讲解相关推荐

  1. Redis 常用命令的学习

    Redis 常用命令的学习 文章目录 Redis 常用命令的学习 1. 介绍 2. Redis 的五种数据类型以及操作命令 1. 连接 2. Redis的key的操作命令 3.字符串类型:string ...

  2. Redis常用命令|查询|删除|模糊操作

    Redis中有很多操作命令,今天就给大家整理一下,或许不够全面,欢迎留言沟通. redis常用命令 作用 命令 描述 查看所有key keys * 模糊匹配key keys xxx* | keys * ...

  3. Redis常用命令集

    Redis常用命令集 1)连接操作命令 quit:关闭连接(connection) auth:简单密码认证 help cmd: 查看cmd帮助,例如:help quit 2)持久化 save:将数据同 ...

  4. Redis常用命令之操作Hash类型

    场景 Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 Re ...

  5. Redis —— 常用命令一览

    引言 参考<菜鸟教程 Redis 常用命令>,其中红色为极其重要,蓝色为重要. 一.总览 二.key相关命令 三.String 相关命令 四.Hash 相关命令 五.List 相关命令 六 ...

  6. redis常用命令:

    redis常用命令: 一 .键值相关命令: key:取出当前数据库中的所有key: keys *   //全匹配 keys  my* //模糊匹配 exists : 确认一个key是否存在,返回值1存 ...

  7. 查看redis常用命令

    Redis常用命令 一. Connection连接 ping 使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG 案例: 测试ping quit 请求服 ...

  8. 八股文之linux中redis常用命令

    全局操作 查询键 # 查询所有的键,遍历所有的键 keys * 127.0.0.1:6379> keys * "backup4" "backup3" &q ...

  9. redis常用命令个人总结

    一.前言 有时会碰到些运维问题,除了需要手动修改数据库外,还需要手动修改redis. 下方总结下redis常用命令. 二.redis常用命令 1.登录redis服务器后,执行命令登录redis: re ...

  10. [redis] Redis 常用命令

    redis 五种数据类型的使用场景 浅谈 Redis 数据库的键值设计 redis命令文档: http://doc.redisfans.com/index.html 1. redis查看当前所有的ke ...

最新文章

  1. dellt服务器r修复,RE: 求助 Dell T 310服务器蓝屏
  2. php 声音文件链 处理,PHP 三种方式实现链式操作
  3. python棋盘覆盖_java实现的棋盘覆盖
  4. 【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
  5. 看我七十二变-TC还能改包名哦
  6. Esxi 6.7安装教程
  7. java 数据倒叙_Java 数组,如何通过自定义实现倒叙排序?
  8. imuupdate() 解算
  9. Python程序员的就业方向及就业薪资,你都了解吗?
  10. 事件的互不相容和独立的区别
  11. HTML+CSS+JS实现 ❤️ 科技感的数字时钟特效❤️
  12. The Pragmatic Programmer 读书笔记之一 DRY-Don’t Repeat Youself
  13. NULL与nullptr
  14. 不爱说话?社交无能?或许你可以试试这种说话术
  15. studioone机架效果模板_贾爽的分享-贾爽:带你认识StudioOne机架自带的两个混响效果器!...
  16. 开源工程ffdshow
  17. 谷歌修复Chrome浏览器12个高危安全漏洞
  18. 嵌入式系统行业发展五大趋势
  19. 如何将不小心删除的文件修复
  20. FPGA 多数表决器(含代码)

热门文章

  1. 南农计算机分数线,2021南京农业大学录取分数线_历年各专业分数线(2017-2020),各省投档线_一品高考网...
  2. 用AOP思想改造一个服务器的数据存储
  3. Letters[Codeforces-43B]
  4. 在线读取office 文件(Word excel 等)
  5. 小心Java中封装类的值比较
  6. greenDaoMaster的学习研究
  7. [导入]在windows下建立的自己cvsnt服务器
  8. 排序问题-fastjson-JSONObject
  9. MyBatis的分页插件PageHelper的使用
  10. Web开发之Session