Redis

Redis是由一个键指向一个值,而这个值可以是字符串、哈希、列表、无序集合和有序集合

字符串类型命令

字符串类型由键和值组成

  • 查询键 keys
 keys *    #查看所有,*用于匹配规则
  • 设置键和值,若键存在则覆盖 set
#set 键名 值
set name zhangsan
  • 设置一个不存在的键和值,若存在返回0 setnx
#setnx 键名 值
setnx name zhangsan
  • 设置一个指定有效期的键和值 setex
#setex 键名 过期时间 值
setex name 10 zhangsan     #10秒后过期
  • 替换字符串,替换长度又替换部分决定 setrange
#setrange 键名 位置 替换部分
setrange name 3 aaa     #从第三个位置开始替换aaa,索引从0开始
  • 批量设置键和值 mset
#mset 键1 值1 键2 值2
mset name zhangsan age 12
  • 批量设置不存在键和值,成功返回OK msetnx
#msetnx 键1 值1 键2 值2
msetnx name zhangsan age 12
  • 获取原有的值并设置新值 getset
#getset 键名 新值
getset name lisi
  • 获取对应键的值 get
#get 键名
get name
  • 批量获取 mget
#mget 键1 键2 键3
mget name age
  • 获取该键对应的值上指定范围的部分值 getrange
#getrange 键名 起始位置 结束位置
getrange name 2 4      #获取字符串上第2到第4位的值,索引从0开始
  • 判断某键是否存在 exists
#exists 键名
exists name
  • 删除键 del
#del 键名
del name
  • 设置过期时间 expire
#expire 键名 时间
expire name 10     #10秒后过期
  • 查看过期时间 ttl
#ttl 键名
ttl name       #结果是-1表示永不过期,-2则是已过期
  • 移除过期时间 persist
#persist 键名
persist name
  • 移动键到别的库,redis默认有16个库(0~15) move
#move 键名 数据库号码
move name 12         #移动name键到第12号库
  • 进入库 select
#select 数据库号码
select 12     #进入12号库
  • 删除当前库的所有数据 flushdb
flushdb         #只清空当前库
  • 清空所有数据 flushall
flushall        #清空所有的库
  • 指定键做自增操作,只作用于数字 incr
#incr 键名
incr age       #如果age是11,自增为12
  • 指定键加上指定的值 incrby
#incrby 键名 值
incrby age 12        #age加上12
  • 指定键做自减操作 decr
#decr 键名
decr age        #age自减
  • 指定键减去指定的值 decrby
#decrby 键名 值
decrby age 12         #age减去12
  • 给指定的键追加值 append
#append 键名 追加值
append name aaa       #name字符串加上aaa
  • 获取值的长度 strlen
#strlen 键名
strlen name    

哈希类型命令

哈希由键和哈希表组成,哈希表中又可以存多个键值对,哈希表名:{键:值}

  • 设置哈希表的键和值 hset
#hset 哈希名 键名 值
hset hashname name zhangsan
  • 批量设置哈希表的键和值 hmset
#hmset 哈希名 键1 值1 键2 值2
hmset hashname name zhangsan age 18
  • 设置一个哈希表中不存在的键和值 hsetnx
#hsetnx 哈希名 键名 值
hsetnx hashname sex 0
  • 获取哈希表的值 hget
#hget 哈希名 键名
hget hashname name
  • 批量获取哈希表的值 hmget
#hmget 哈希名 键1 键2 键3
hmget hashname name age sex
  • 获取哈希表中所有的值 hgetall
#hgetall 哈希名
hgetall hashname
  • 获取哈希表中键的数量 hlen
#hlen 哈希名
hlen hashname
  • 删除哈希表中的键 hdel
#hdel 哈希名 键名
hdel hashname name
  • 判断哈希表中是否存在该键 hexists
#hexists 哈希名 键名
hexists hashname name
  • 返回哈希表中所有的键 hkeys
#hkeys 哈希名
hkeys hashname
  • 返回哈希表中所有的值 hvals
#hvals 哈希名
hvals hashname

List列表(双向链表结构)

Redis列表是最简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左侧)或尾部(右侧)
List可以作为栈,也可以作为队列(队列是从头部存,从尾部取)

  • 往头部压入一个字符串 lpush
#lpush 列表名 字符串
lpush listname aaa
  • 往尾部压入一个字符串 rpush
#rpush 列表名 字符串
rpush listname bbb
  • 获取列表内容 lrange
#lrange 列表名 开头 结束
lrangelistname 0 -1       #0到-1代表获取全部,0:表示开头  -1:表示结束
  • 在指定字符串位置前或后添加字符串 linsert
#linsert 列表名 before 指定字符串 添加字符串
linsert listname before bbb a2       #在bbb前面添加a2

#linsert 列表名 after 指定字符串 添加字符串
linsert listname after bbb b2      #在bbb后面添加b2
  • 修改指定索引位置上的值 lset
#lset 列表名 索引 新字符串
lset listname 1 change       #把索引为1的字符串改为change
  • 删除指定方向、数量、字符串的值 lrem
#lrem 列表名 整数 指定字符串
lrem listname -2 aaa         #删除aaa后2个字符串
#整数:正数表示前几个,负数代表后几个,0表示所有
  • 删除指定范围外的所有值 ltrim
#ltrim 列表名 起始索引 结束索引
ltrim listname 1 2        #删除除了1到2之外所有字符串
  • 从头部删除元素(出栈),并返回 lpop
#lpop 列表名
lpop listname
  • 从尾部删除元素,并返回 rpop
#rpop 列表名
rpop listname
  • 将一个列表尾部的元素转移到一个列表的头部 rpoplpush
#rpoplpush 出栈列表 入栈列表
rpoplpush listname list2        #将listname中的最后一个字符串转移到list2的第一个
  • 返回列表中该索引位的元素 lindex
#lindex 列表名 索引
lindex listname 2
  • 返回列表元素长度 llen
#llen 列表名
llen listname

Set无序集合

Set是string类型的无序集合。集合的成员时唯一的,这就意味着集合中不能出现重复的数据。

  • 添加一个元素 sadd
#sadd 集合名 '字符串'
sadd setname aaa
  • 获取集合中所有元素(结果是无序的) smembers
#smembers 集合名
smembers setname
  • 删除集合中的一个字符串 srem
#srem 集合名 '字符串'
srem setname aaa
  • 随机返回并删除集合中一个元素 spop
#spop 集合名
spop setname
  • 随机获取集合中的一个元素 srandmember
#srandmember 集合名
srandmember setname
  • 移动元素到另一个集合 smove
#smove 集合1 集合2 字符串
smove setname set2 aaa        #将aaa从setname转移到set2
  • 返回集合中元素个数 scard
#scard 集合名
scard setname
  • 判断元素是否存在集合中 sismember
#sismember 集合名 字符串
sismember setname aaa       #判断setname中是否存在aaa
  • 返回两个集合的差集 sdiff
#sdiff 集合1 集合2         #以第一个集合为标准,获取第二个集合中不存在的
sdiff setname set2        #以setname为标准,获取set2中不存在的字符串
  • 获取所有集合的差集,并存到新的集合中 sdiffstore
#sdiffstore 新集合名 集合1 集合2 。。。。
sdiffstore newset setname set2 set3          #分别获取set2和set3对于setname的差集,存入newset中
  • 返回多个集合中的交集 sinter
#sinter 集合1 集合2 。。。。
sinter setname set2            #返回setname和set2的交集
  • 返回多个集合的交集,并存到新的集合中 sinterstore
#sinterstore 新集合名 集合1 集合2 。。。。
sinterstore newset setname set2 set3    #将setname、set2、set3的交集存入newset

Sset有序集合

有序集合也是string类型元素的集合,不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合成员时唯一的,但分数可以重复。

  • 向集合中添加分数和元素 zadd
#zadd 集合名 分数 字符串
zadd setname 60 aaa          #分数可以随便给,分数只决定排序
  • 删除集合中的元素 zrem
# zrem 集合名 字符串
zrem setname aaa
  • 给指定元素增加分数值 zincrby
#zincrby 集合名 增加分数 字符串,如果元素存在,增加值。不存在,创建值
zincrby setname 20 aaa        #如果aaa存在,分数加20,不存在,则创建aaa,分数为20
  • 根据分数将元素从小到大排序 zrange
#zrange 集合名 0 -1 withscores
zrange setname 0 -1 withscores      #0到-1指的是所有元素
  • 根据分数将元素从大到小排序 zrevrange
#zrevrange 集合名 0 -1 withscores
zrevrange setname 0 -1 withscores
  • 返回元素在集合中的排名(从小到大) zrank
#zrank 集合名 元素
#zrange setname aaa      #返回的是排名
  • 返回元素在集合中的排名(从大到小) zrevrank
#zrevrank 集合名 元素
zrevrank setname aaa
  • 返回集合中指定区间内的元素 zrangebyscore
#zrangebyscore 集合名 起始分数 结束分数 withscores
zrangebyscore setname 20 50 withscores       #返回20分到50分之间的元素
  • 返回集合中给定区间的元素数量 zcount
#zcount 集合名 起始分数 结束分数
zcount setname 30 40             #返回30分到40分之间的元素
  • 返回集合中元素的个数 zcard
#zcard 集合名
zcard setname
  • 返回指定元素的分数 zscore
#zscore 集合名 元素
zscore setname aaa
  • 删除集合中排名在指定区间内的元素(从小到大) zremrangebyrank
#zremrangebyrank 集合名 起始排名 结束排名
zremrangebyrank setname 2 5              #删除第2到第5名的元素
  • 删除集合中分数在指定区间的元素 zremrangebyscore
#zremrangebyscore 集合名 起始分数 结束分数
zremrangebyscore setname 20 40            #删除20分到40分之间的元素

Redis高级

通过redis配置文件设置密码参数,提高redis服务的安全性

  • 查看是否设置了密码
config get requirepass
  • 设置临时密码(服务重启后不再生效)
config get requirepass '密码'
  • 修改配置文件

    1.打开redis.conf 文件
    2.在requirepass foobared下加上 # requirepass 密码
    redis.conf

  • 重启服务

sudo service redis restart
  • 登录(两种方法)

    1.连接redis的时候输入密码
    ./redis-cli -a 密码
    2.进入后使用auth指令
    auth 密码

Redis事务

事务是将多条语句组成一个单元,要么都成功,要么都失败

  • 开启一个事务队列
multi
  • 暂存指令

指令就是上面的操作指令

set name zhangsan           #指令1         
set age 23                         #指令2
  • 开始执行(提交事务)
exec
  • 清空指令队列(事务回滚)
discard              #就是取消之前的操作

Redis乐观锁

在redis中,乐观锁是对某一个key发起一个监视,接下来进行事务,如果在事务执行前,key的值发生改变,则事务执行失败(被打断)

  • 开启监视
#watch 键名
watch name           #监视name这个键

Redis持久化机制

保证电脑宕机后数据的保存,定期将数据写入磁盘,没有持久化就不算数据库

  • 1.snapshotting(快照) 默认方式

    配置 redis.conf 中的 save
    save 900 1 # 900秒内超过一个key被修改,则保存
    save 300 10 # 300秒内超过10个key被修改,则保存
    save 60 10000 #60秒内超过10000个key被修改,则保存
    在这里插入图片描述

  • 2.Append-only file (aof方式)

    1.配置 redis.conf 中的 appendonly no 改为 yes
    2.会在bin目录下产生一个.aof文件
    3.配置 redis.conf 中的写入方式 appendfsync
    appendfsync always #收到写命令就立刻写入磁盘,最慢,但保证持久化
    appendfsync everysec #每秒写入磁盘一次,在性能和持久化方面做折中处理
    appendfsync no #完全依赖os,性能最好,不保证持久化

Redis发布和订阅

redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息

  • 订阅频道
#subscribe 频道名称
subscribe cctv       #创建一个cctv频道
  • 发布消息

在另一个客户端发布内容

#publish 频道名称 '发布内容'
publish cctv HelloWorld
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值