redis学习

本文详细介绍了Redis的安装配置,包括设置端口、允许远程访问、持久化选项和密码保护。此外,还列举了多种关键命令,如数据类型的操作、事务处理、发布订阅功能,以及各种命令的使用场景和示例。

redis学习

官网链接教程

1.配置

解压安装后make 或者
ubuntu可以直接sudo apt install redis-server安装
redis-server redis.conf启动
redis-cli -h 127.0.0.1 -p 6379运行
redis-cli --raw–raw避免中文乱码
sudo wget http://download.redis.io/redis-stable/redis.conf
配置redis.conf文件
或者在命令行配置:
config set 配置项名设置
config get 配置项名查看

#获取redis.conf配置文件
#注释掉bind (允许远程)
#修改protect-mode为no
#修改appendonly为yes(持久化)
#修改requirepass 123456(设置密码)
#如果daemonize为yes的话,就会和docker的后台冲突,导致redis启动不起来

名称解释建议默认
port端口63796379
bind绑定主机注释掉或0.0.0.0127.0.0.1
protect-mode保护模式,其他主机连不了noyes
appendonly每次更新都写入日志记录yesno
save多长时间多少次更新操作再同步不动三个900-1,300-10,60-10000
database数据库数量1616,可以select 0-15选择
daemonize后台运行非docker都yesno
requirepass密码设置12346foobared,启动redis-cli需要auth 密码

help command帮助

1 key

命令意思案例1案例2
del删除keydel namedel name1 name2 name2 删除多个
set创建keyset name a1
setex设置expiresetex name value 10086
setnx不存在才设置setnx name value
setrange设置大小,截断setrange name 6 value到6后面的才设置
strlen获取大小strlen name
mset设置多个mset name1 value1 name2 value2…
msetnx只key不存在才设置成功msetnxmsetnx要不成功要么全部成功
get获取get name
psetex毫秒ttl设置值psetex name 1000 value
mget获取多个值mget name1 name2 name3…
getset获取,没这个key给值getset name value
randomkey随机获取randomkey
exists是否存在exists name
expire生存时间expire name 30
ttl秒单位查看生存时间ttl name ,-1表示不删
pttl毫秒单位看生存时间pttl name
expireat设置生存时间戳expireat cache timestamp时间戳
pexpireat毫秒设置pexpireat name 1555555555005
persist移除倒计时persist name
keys模式匹配获取所有keykeys /o/t??/t[w]
mset设置多个keymset a1 a a2 b a3 c
flushdb删除数据库所有数据flushdb
rename重命名rename name name2
renamenx新key不存在才重命名renamenx name name2
migrate迁移到远程机器migrate 127.0.0.1 7777 key db 1000timeout [copy不删除replace删除]
move本地不同库迁移move key dbmove name 15
dump序列化,反restoredump keyname
restore反序列化,值为dump后的restore name 0 “\xe4\xbd\xa0\xe5\xa5\xbd”ttl为0表示没有ttl
sort排序sort name limit 0 5 desc最大前五个sort name alpha中文排序
object查看object econding name看编码 refcount看存储值的次数object idletime name看冷落时间
type查看类型type name
scan扫描keyscan 0scan 游标

redids

set

EX second :设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。(expire)
PX millisecond :设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。(p)
NX :只在键不存在时,才对键进行设置操作。 SET key value NX 效果等同于 SETNX key value 。(nx)
XX :只在键已经存在时,才对键进行设置操作。(exists)

用EX和NX可以实现锁的机制
set name value NX EX 10000

1.sort

sort还有很多用法:

  1. 通过别的值排序by
    先排序u的value,再取uidsort12. 别的值排序get
    先排序uid再取u
    的value
    get

  2. get和by可以组合
    uid根据u的value排序再取uname的值
    getAndBy3. 获取多个值排序=>多get
    get

  3. 获取被排序的值get #
    #4. 给一个不存在的by值,可跳过排序
    在这里插入图片描述5. 哈希排序用->指明排序字段
    ![hmset](https://img-blog.csdnimg.cn/d86001233d544a5e99db5cbef041dd54.png#pic_center

  4. 保存排序结果store
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/9282b96ec79946da9d20078728261322.png#pic_center

  5. 排序单词 alpha
    sort

  6. 前2名limit 0 2
    limit

2.scan
  1. scan 参数
    scan 游标 count 总数 match 正则 type 类型

在这里插入图片描述2. scan和其他数据类型
scan结果是数据库键scan 0
sscan结果是集合成员sscan myset 0
hscan结果是键值对hscan myhash 0
zscan结果是有序集合元素zscan mysortset 0

2 String二进制

命令意思案例1案例2
append对不存在的key setappend name ‘value’
getrange截断字符串getrange name 0 2getrange name start end
bitcount获取字节bitcount name
setbit设置字节值setbit name 12 1bitcount和setbit可以用来签到
bitop字节进行与或非运算bitop and/or/xor/not bits key1 key2…
getbit获取字节位值getbit bits 3
decr减一decr name
decyby减制定数decrby name 20
getrange/substr截断字符串getrange name 0 10

g
incr|加一|incr name|incr和expire可以达到生存时间计时
incyby |加制定值|incrby name 30
incrbyfloat|加制定小数值|incrbyfloat name 0.1|incrby name 314e-2

3 Hash集合map

命令意思案例1案例2
hset设置mapkey n v n1 v1…
hsetnx不存在才操作有效hsetnx key n v…
hmset设置多个namehmset key name1 value1 name2 value2
hgetall获取所有hgetall key
hget根据name获取hget key name
hmget获取多个namehmget key name1 name2…
hdel删除一个namehdel key namehdel key name1 name2删除多个
del删除所有del key
hexists是否存在namehexists key name
hincrbyname的value加nhincrby key name 200
hincrbyfloatname的value加字符hincrbyfloat key name 0.1
hkeys所有namehkeys key
hlen获取name的数量hlen key
hvals获取所有valuehvals key

4 List双向链表

命令意思案例1案例2
blpop移出并获取列表的第一个元素blpop key1 key2… timeout秒数blpop key1 key2… 5(按照给定key的顺序依次进行)
brpop移除并获取最后一个元素brpop key timeouttimeout为0表示无限长
del 删除列表del key1 key2 key3…
lpush左添加lpush key value1 value2…
rpush右添加rpush key v1 v2…
rpushx存在key才添加rpushx key v1 v2
llen大小llen key
brpoplpushsource右边的添加到destination左边,找不到阻塞等最后一个放到第一个brpoplpush a a 0
rpoplpushsource右边的添加到destination左边,找不到nil
lindex查看索引位置上的值lindex b 2-1表最后 0表第一
linsert插入到指定值之前linsert list before ‘a’ ‘new_a’不存在a就失败,存在就在a前面插入new_a
lpop删掉第一个lpop b
rpop删掉最后一个rpop b
lrange查看列表元素lrange list 0 -1
lpushx插入但表不能为空lpushx list value
lrem移除相同值lrem list 0 ‘a’0表示所有相同的 >0表示尾到头count个 <0表示头到尾count个
lset更改值lset list 1 ‘new_value’
ltrim大量删除ltrim list 1 4只保留1-4的值,其他都删了

如果所有给定 key 都不存在或包含空列表,那么 BLPOP 命令将阻塞连接,直到等待超时,或有另一个客户端对给定 key 的任意一个执行 LPUSH 或 RPUSH 命令为止
超时参数 timeout 接受一个以秒为单位的数字作为值。超时参数设为 0 表示阻塞时间可以无限期延长(block indefinitely) 。
BLPOP 可以用于流水线(pipline,批量地发送多个命令并读入多个回复),但把它用在 MULTI / EXEC 块当中没有意义。因为这要求整个服务器被阻塞以保证块执行时的原子性,该行为阻止了其他客户端执行 LPUSH 或 RPUSH 命令。
因此,一个被包裹在 MULTI / EXEC 块内的 BLPOP 命令,行为表现得就像 LPOP 一样,对空列表返回 nil ,对非空列表弹出列表元素,不进行任何阻塞操作。
相同的 key 可以被多个客户端同时阻塞。
不同的客户端被放进一个队列中,按『先阻塞先服务』(first-BLPOP,first-served)的顺序为 key 执行 BLPOP 命令。

1.rpoplpush

rpoplpush list1 list1 当两个key相同时,可以向客户端一个接一个的发送,而不像lrange 0 -1一样将所有元素发送
rpoplush或他的阻塞版本brpoplpush比单纯的lpush+rpop或brpop更加的安全

5 Set哈希表不重复

命令意思案例1案例2
sadd添加元素,结果不重复sadd key v1 v2
scard查看数量scard key
del删除del key
sdiff求多个key的差集sdiff k1 k2 k3…注意顺序-前减后
sdiffstore将sdiff保存起来sdiffstore result b a
sinter多个key的交集sinter a b
sinterstoresinter结果保存sinterstore result a b
sismember是否存在sismember key ‘hello’存在为1 不存在为0
smembers返回所有成员smembers key
smovesource的value移到destinationsmove a b ‘hello’没成功0成功1
spop移除随机元素spop key没有元素能移除nil
srandmember随机返回n个元素srandmember key count没有count返回一个 负数返回绝对值个
srem移除元素srem key v1 v2…
sunion求并集sunion k1 k2 k3…
sunoinstoresunion的结果保存sunionstore result a b
sscan获取元素sscan result 0match是parttern count数量

sdiff

6 sorted set有权重来排序(去重)

命令意思案例1案例2
zdd添加元素zass key 10 value 权重 value必须加权重哦
zrange查看元素zrange key 0 -1zrange key 0 -1
zcard返回数量zcard key
zcount返回score在min和max之间的数量zcount key 0 -1 withscores
zincrby添加多少zincrby key 权重 valuezincrby salary 2000 tom(tom加薪)
zrangebyscorezrange可用inf版zrangebyscore key -inf +infzrange用不了inf,但能用0 -1
zrank显示value的排名zrank key tom
zrem移除成员zrem key tomzrem key v1 v2 v3…
zremrangebyrank移除排名内的成员zremrangebyrank key 0 10表第一个 -1表倒数第一个
zremrangebyscore移除score值在min和max之间的zremrangebyscore key 100 200
zrevrangezrange的递减排序版zrevrange a 0 -1
zrevrangebyscore递减排序score之间的zrevrangebyscore key 100 200
zrevrank递减排序成员所在排名zrevrank key tom
zscore返回成员权重zscore key tom
zunionstore多个key的并集并保存zunionstore result count key1 key2…必须有count,指明有几个key需要合并
zinterstoreduogekey求交集并保存zinterstore result count a b
zscan查看元素zscan key 0
1.zunionstore

ZUNIONSTORE salary 2 programmer manager WEIGHTS 1 3 aggregate max
有programmer和mannger两个set,将他们连接起来存到salary里面,其中manager的权重都乘以3,合并用最大值

2.zrange

zrange key min max withstores:
withstores显示权重
min max设置权重最大最小
显示key的权重最大max最小min的成员 并显示权重

7.事务

命令意思案例1案例2
multi标记一个事务块的开始multi
exec事务执行exec在multi到exec会全部一起运行
discard取消事务discard
watch监视keywatch key1 key2…配合multi使用
unwatch取消对所有key监视unwatch如果exec或discard被执行了,unwatch就没必要了

发布订阅

命令意思案例1案例2
psubscribe订阅psubscribe new.* tweet.*和subscribe的区别是可以模式匹配,在redis有大量频道时性能会有影响,因为要匹配
subscribe订阅subscribe news.it news.sport没有模式匹配
publish发送到制定频道publish new.test ‘hello world’返回几就是有几个订阅者接收到数据
pubsub查看pubsub channels 所有pubsub channels news.*
punsubscribe退订
1.pubsub

pubsub channels pattern
channels查看所有频道的,没有pattern是所有
pubsub numsub news.it
numsub看频道订阅者数量,subscribe的
pubsub numpat channel1 channel2…
numpat看频道数量
pubsub numpat
numpat看频道订阅者数量,psubscribe的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厨 神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值