redis - 基础
redis简介
- Redis 是一个开源的,基于内存的NoSql数据库。 它支持多种数据结构
字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets), bitmaps, hyperloglogs 和 地理空间(geospatial)
。 Redis 内置了 复制,LUA脚本和磁盘持久化, 并通过 Redis哨兵(Sentinel)和集群(Cluster)保证了高可用。 - 特点:快!读写性能可达到10万/秒,这得益于所有数据都是存在内存中,而且采用单线程架构避免了线程之间切换和竞争带来的问题,并且采用了epoll来实现IO多路复用。
使用场景简单总结
redis的安装使用
- 安装步骤:
第一步:redis的源码包上传到linux,或者直接下载
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
,具体版本列表查看http://download.redis.io/releases
第二步:tar xzf redis-3.0.7.tar.gz
第三步:ln -s redis-3.0.7.tar.gz redis
建立了一个软链接,不把redis目录固定在指定版本上,有利于未来升级。非必要
第四步:cd redis
第五步:make
第六步:make install
默认安装到/usr/local/bin,可以在任意目录下执行redis命令,也可以指定安装配置make install PREFIX=/usr/local/redis
。一般软件安装到/usr目录下
另外docker安装更加方便docker run -p 6379:6379 --name redis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
远程连接其他主机的redis远程连接其他主机的redis
vim redis.conf
注释以下绑定的主机地址#bind 127.0.0.1 或者bind 0.0.0.0
修改protected-mode no 或者config set requirepass 123 ->123是密码
防火墙通过6379端口 iptables -I INPUT -p tcp --dport 6379 -j ACCEPT后台启动
vim redis.conf
daemon yes
./redis-server …/redis.conf (可以特殊指定redis.conf)连接redis
./redis-cli -h 192.168.0.1 -p 6379注册为windows服务
redis-server --service-install redis.windows.conf卸载服务命令:redis-server --service-uninstall开启服务redis-server –service-start停止服务redis-server –service-stop
常用redis命令
keys命令
dbsize返回当前数据库的key数量。时间复杂度是O(1),不用担心阻塞问题
keys 返回当前数据库指定正则匹配的key,因可能会阻塞较长时间生产环境禁用,推荐scan
scan 它们每次执行都只会返回部分元素(默认10个),不会出现像 KEYS 或者 SMEMBERS 命令带来的可能会阻塞服务器的问题。对应集合遍历内部元素的有hcan、sscan、zscan。exists
rename 重命名。如果newkey已经存在,则值将被覆盖.可使用renamenx
randomkey 随机返回一个键
del 批量删除key 。 如某些key不存在,则直接忽略expire 设置key的过期时间 。过期时间为负值会立即被删除。返回 -1没有设置过期时间,-2键不存在。list,hash不支持集合内部元素的过期功能
persist 将key设置为永久的
ttl 返回key的剩余过期时间type 存储的数据结构类型,即string,hash, list, set和zset的类型
object encoding返回内部的实际编码格式,如string结构类型其实内部对应着int embstr raw 三种编码格式迁移键可以使用move,dump+restore, migrate。推荐使用migrate,原子性操作,支持多个键,只需要在源redis上操作即可,简单方便。
string类型
常用命令 | 描述 | 备注 |
---|---|---|
set |
设置key value 如果已存在key 会覆盖(包括过期时间) |
EX – 设置键key的过期时间,单位秒 PX – 设置键key的过期时间,单位毫秒 NX – 只有键key不存在的时才会设置key的值 XX – 只有键key存在的时才会设置key的值 SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX |
setrange | 从指定的offset处开始,覆盖value的一部分 | 和getrange对应 |
setex |
SETEX key seconds value 设置过期时间 |
可以被set代替; psetex是以毫秒为单位 |
setnx |
SET if Not eXists的简写 当key不存在时才设置 |
可以被set代替 |
mset | 批量设置key value | msetnx批量设置,是原子的,如果有一个key存在全部失败 |
getset | 设置key value并返回原来key对应的value | 和INCR一起使用可实现重置的计数功能 |
append | 追加value值 | |
get | 返回string类型的value | |
mget | 批量返回key的值 | |
getrange | 返回value中指定的子串 | |
strlen | 返回key的string类型value的长度 | |
incr | 将整数型的value值加1 | incrby 指定增加的值,可为负数 |
decr | 将整数型的value值减1 | decrby 指定减少的值,可为负数 |
缓存,降低数据库压力:
存储如共享session,JWTtoken等;校验用户获取验证码次数或者一天内登陆失败次数等等,利用注解+AOP来拦截实现
3. hash类型
将key值进行分类管理,并且大多情况下占用内存更少
常用命令 | 描述 | 备注 |
---|---|---|
hset | hset myhash:001 name xiaoming | |
hmset | 批量设置指定key哈希集中指定的字段 | |
hsetnx | 只在 key 指定的哈希集中不存在指定的字段时,设置字段的值 | |
hdel | 从 key 指定的哈希集中移除指定的域 | |
hexists | 返回hash里面field是否存在 | |
hget | ||
hmget | 批量返回指定key哈希集中指定的字段 | |
hgetall | 返回指定key哈希集中所有的字段和值 | hkeys 返回所有字段;hvals返回所有字段对应的值 |
hlens | 返回 key 指定的哈希集包含的字段的数量 | |
hincrby |
list列表
set集合
是string类型的无序集合,可以对集合求交集sinter,并集sunion,差集sdiff,可应用于好友推荐,tag标签查询等场景。标签的简单示例:
给用户添加标签sadd user:1:tags tag1 tag2 tag3
,sadd user:2:tags tag1 tag2 tag3
给标签添加用户sadd tag1:users user:1 user:2
,sadd tag2:users user:1 user:2
注意上面要放在一个事务中执行,可利用lua脚本
获取两个用户共有的标签sinter user:1:tags user:2:tags
zset有序集合
排行榜系统连接和服务器配置常用命令
常用命令 | 描述 | 备注 |
---|---|---|
auth | auth password 验证密码登录 | |
ping | 测试连接,成功返回pang | |
select | 选择数据库 | |
config get | 读取redis服务器的配置文件参数 |
* 可读取所有支持的配置参数 也可参看单独某个参数,如config get requirepass查看密码 (感觉这样很不安全) |
config set | 设置redis服务器的配置文件参数 |
如:可以用来设置密码(立即生效) config set requirepass 123456 服务器重启后修改会失效,若想长久保存可追加 “config rewrite”命令 |
flushdb | 清除当前数据库 | 危险命令,建议rename-command来规避 |
flushall | 删除所有数据库 | |
slaveof | SLAVEOF host port 变为指定服务器的从服务器 | 利用SLAVEOF NO ONE可以切换为主服务器 |
shutdown | 关闭redis服务 |
- 调试常用命令
常用命令 | 描述 | 备注 |
---|---|---|
info |
以一种易于理解和阅读的格式, 返回关于Redis服务器的各种信息和统计数值。 |
|
monitor | 用于调试,开启后显示服务器当前执行的命令 | ctrl+c结束 |
object | 查看key的编码方式,被引用的次数,空闲时间 | |
dbsize | 返回当前数据里面keys的数量 | |
role | 返回主从角色 | |
client list | 返回连接的客户端列表 | |
client kill | 关闭指定客户端连接 |
redis基本特性
1. redis的安全性
在redis.conf配置文件里可以通过requirepass password 来设定密码;也可以在客户端通过config set requirepass password来设定密码(立即生效,但服务器重启后修改会失效,若想长久保存可追加 “config rewrite”命令)。然后连接redis(注意连接成功后但其实并未被授权),可通过auth password输入密码通过验证。注意:因为redis的查询服务特别快,因此密码要设置的足够长,防止暴力破解。
高版本的redis安装完默认只能本地连接 (bind 127.0.0.1),且开启了保护模式(protected-mode yes ),可以通过修改这两项来让其他客户端连接redis服务。
生产环境上对一些危险的命令(如flushdb,flushall,keys,config set,config get等)要禁用或重命名。具体做法是,修改服务器的配置文件redis.conf,在SECURITY这一项中,我们新增以下命令:
rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC81TbdkSmLAzRPmcarcR
rename-command FLUSHDB qf69aZbLAX3cf3ednHM3SOlbpH71yEXLAX3cf3e
rename-command CONFIG FRaqbC8wSA1XvpFVjCRGryWtIIZS2TRvpFVjCRG
rename-command KEYS eIiGXix4A2DreBBsQwY6YHkidcDjoYA2DreBBsQ
#如果要禁用则:
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command KEYS ""
更多redis安全内容参考官方中文文档
附录
redis2.8-redis.conf
redis - 基础相关推荐
- mysql主从复制、redis基础、持久化和主从复制
一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...
- Redis基础数据结构内部实现简单介绍
5种基础数据结构 Redis有5种基础数据结构,分别是:String(字符串),list(列表),hash(字典),set(集合),zset(有序集合),这五种是我们开发种经常用的到的,是Redis种 ...
- Redis基础-下载安装配置
Nosql: NoSQL:即 Not-Only SQL( 泛指非关系型的数据库),作为关系型数据库的补充. 作用: 应对基于海量用户和海量数据前提下的数据处理问题. 特征: 可扩容,可伸缩 大数据量下 ...
- [.net 面向对象程序设计深入](36)Redis——基础
[.net 面向对象程序设计深入](36)Redis--基础 很长一段时间没更新博客了,坚持做一件事,真不是件容易的事,后面我会继续尽可能的花时间更新完这个系列文章. 因这个系列的文章涉及的范围太大了 ...
- 【redis】redis基础命令,分布式锁,缓存问题学习大集合
写在前面 Redis是一个高速的内存数据库,它的应用十分广泛,可以说是服务端必学必精的东西.然而,学以致用,无用则无为.学了的东西必须反复的去用,去实践,方能有真知.这篇文章记录了我在redis学习过 ...
- 【Java从0到架构师】Redis 基础 - 数据类型
Redis 原理与实战 Redis 基础 为什么 Redis 这么快? Redis 安装.启动 Redis 常用配置 Redis 数据类型 通用命令 String - value 可以是字符串.数值. ...
- redis 基础数据结构实现
参考文献 redis数据结构分析 Skip List(跳跃表)原理详解 redis 源码分析之内存布局 Redis 基础数据结构与对象 Redis设计与实现-第7章-压缩列表 在redis中构建了自己 ...
- redis 基础数据类型及应用 1
redis 基础数据类型及应用 1 redis简介 一. string 数据类型与结构(字符串) 1 string类型简介 2 常用命令 1.set 命令 2.get 命令 3.getset 命令 4 ...
- Redis基础篇(万丈高楼平地起):核心底层数据结构
微信原文链接,排版更舒适. 大家好,我是小龙.近期有很多小伙伴私信我Redis怎么做持久化?集群方案怎么做?分布式锁怎么实现?可是我发现,每次简答完一个问题他还有其他类似问题,或则各个知识点不能串通形 ...
- Redis基础常用命令入门
目录 Redis基础命令 一.字符串类型 ▪️ 赋值 SET : ▪️ 获取 GET: ▪️ 递增(减) 1 INC.DECR: ▪️ 递增(减)指定整数 INCRBY .DECRBY: ▪️ 递增( ...
最新文章
- 吴恩达推荐笔记:22 张图总结深度学习全部知识
- 基于Android的红外测温设计,基于Android的红外三维重构移动APP设计与实现
- Halcon初学者知识【19】带paint_的系列算子
- [Python]元组与列表的区别及内建用法
- 揭秘:支付宝小程序 V8 Worker 技术演进
- Tomcat 之 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099;...
- 尽早查看针对Java 11的功能
- 哈密顿路径_检查图形是否为哈密顿量(哈密顿路径)
- 浪潮服务器 虚拟光驱,使用IPMI功能远程安装Windows Server 2003操作系统步骤
- SpringCloud+Redis
- 如何接受上级指令_与上级沟通的技巧
- 并发模式之Future模式
- WinSCP无法连接linux,而secureCRT却可以
- KeyShot实例教程教你怎么模拟水面效果
- centos 安装jenkins
- mysql replication(主从复制)(二)MSS模式
- java求100以内的素数
- “刀片嗓”“水泥鼻”“咳出肺”可以这样缓解!
- Uncaught initialization exception thrown by servlet
- 安霸Ambarella三款CV系列芯片对比--CV2S、CV22S、CV25S
热门文章
- idea调整主题和代码风格
- 数据结构与算法(一):链表
- android 自定义刷新控件,Android开发中MJRefresh自定义刷新动画效果
- Java SE有几个代码_JavaSE常用类及方法的介绍(附代码)
- linux进程调度周期,Linux进程组调度机制学习
- vue如何取消下拉框按回车自动下拉_Web自动化测试 | Select下拉框
- 重庆邮电大学java试题_Java程序设计
- 自动驾驶前沿综述:基于深度强化学习的自动驾驶算法
- 奖金+大赛入门,来参加我们的论文有奖复现!
- 大规模中文概念图谱CN-Probase正式发布