redis - 基础

redis简介

  • Redis 是一个开源的,基于内存的NoSql数据库。 它支持多种数据结构 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets), bitmaps, hyperloglogs 和 地理空间(geospatial)。 Redis 内置了 复制,LUA脚本和磁盘持久化, 并通过 Redis哨兵(Sentinel)和集群(Cluster)保证了高可用。
  • 特点:快!读写性能可达到10万/秒,这得益于所有数据都是存在内存中,而且采用单线程架构避免了线程之间切换和竞争带来的问题,并且采用了epoll来实现IO多路复用。

使用场景简单总结

redis的安装使用

  1. 安装步骤:

第一步: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

  1. 远程连接其他主机的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

  2. 后台启动
    vim redis.conf
    daemon yes
    ./redis-server …/redis.conf (可以特殊指定redis.conf)

  3. 连接redis
    ./redis-cli -h 192.168.0.1 -p 6379

  4. 注册为windows服务

    redis-server --service-install redis.windows.conf
    卸载服务命令:
    redis-server --service-uninstall
    开启服务
    redis-server –service-start
    停止服务
    redis-server –service-stop

常用redis命令

  1. 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上操作即可,简单方便。

  2. string类型

常用命令描述备注
set设置key value
如果已存在key 会覆盖(包括过期时间)
EX – 设置键key的过期时间,单位秒
PX – 设置键key的过期时间,单位毫秒
NX – 只有键key不存在的时才会设置key的值
XX – 只有键key存在的时才会设置key的值
SET命令加上选项已经可以完全取代SETNX, SETEX, PSETEX
setrange从指定的offset处开始,覆盖value的一部分和getrange对应
setexSETEX key seconds value
设置过期时间
可以被set代替; psetex是以毫秒为单位
setnxSET if Not eXists的简写
当key不存在时才设置
可以被set代替
mset批量设置key valuemsetnx批量设置,是原子的,如果有一个key存在全部失败
getset设置key value并返回原来key对应的value和INCR一起使用可实现重置的计数功能
append追加value值
get返回string类型的value
mget批量返回key的值
getrange返回value中指定的子串
strlen返回key的string类型value的长度
incr将整数型的value值加1incrby 指定增加的值,可为负数
decr将整数型的value值减1decrby 指定减少的值,可为负数

缓存,降低数据库压力:
存储如共享session,JWTtoken等;校验用户获取验证码次数或者一天内登陆失败次数等等,利用注解+AOP来拦截实现
3. hash类型

将key值进行分类管理,并且大多情况下占用内存更少

常用命令描述备注
hsethset myhash:001 name xiaoming
hmset批量设置指定key哈希集中指定的字段
hsetnx只在 key 指定的哈希集中不存在指定的字段时,设置字段的值
hdel从 key 指定的哈希集中移除指定的域
hexists返回hash里面field是否存在
hget
hmget批量返回指定key哈希集中指定的字段
hgetall返回指定key哈希集中所有的字段和值hkeys 返回所有字段;hvals返回所有字段对应的值
hlens返回 key 指定的哈希集包含的字段的数量
hincrby
  1. list列表

  2. 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

  3. zset有序集合
    排行榜系统

  4. 连接和服务器配置常用命令

常用命令描述备注
authauth password 验证密码登录
ping测试连接,成功返回pang
select选择数据库
config get读取redis服务器的配置文件参数* 可读取所有支持的配置参数
也可参看单独某个参数,如config get requirepass查看密码 (感觉这样很不安全)
config set设置redis服务器的配置文件参数如:可以用来设置密码(立即生效)
config set requirepass 123456
服务器重启后修改会失效,若想长久保存可追加 “config rewrite”命令
flushdb清除当前数据库危险命令,建议rename-command来规避
flushall删除所有数据库
slaveofSLAVEOF host port 变为指定服务器的从服务器利用SLAVEOF NO ONE可以切换为主服务器
shutdown关闭redis服务
  1. 调试常用命令
常用命令描述备注
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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值