一、常用命令
· auth password :输入密码连接redis
1 . String :
get key :获取 / set key :新增
setnx key: 新增,若数据不存在返回1,已存在则返回0(setnx:set if not exists)
getset key value :获取key键初始值,修改值为value
del key :删除
incr key :获取key值并加一(若redis中没有对应key就会创建一个值为一的新key / 若key对应值不能转化为int类型就会报错)
decr key :获取key值并减一(…… 一个值为-1的新key / ……)
incrby / decrby key value :获取key值并➕/➖value ……
append key value :获取key值并在其后面拼接value并返回拼接完成后的长度(若redis中没有对应的key就会创建一个值为value的新key)
2.hash :
hset hashname key value :设置name为hashname的hash数据的单个key和value(hash不存在将会被创建)
hmset hashname key1 value1 key2 value2…… :设置hashname的多个键值对
hget hashname key :获取……
hmget hashname key1 key2 …… :获取……
hgetall hashname :获取name为hashname的hash数据的所有键值(h : hash / all : all)
hdel hashname key1 (key2 ……):删除name为hashname的hash数据的键值,返回影响条数
del hashname :删除hashname的所有数据
hincrby hashname key value :获取hashname的key对应值并➕value
hexists hashname key :判断hashname中有没有对应的key,是则返回1,否返回2
hlen hashname :返回hashname中有几个key(h : hash / len :length)
hkeys hashname :返回所有的key
hvals hashname :返回所有的value
3.list :
lpush listname value1 value2 …… :从左设置name为listname的list的value1、2……(list不存在将会被创建 l:left)
rpush listname value1 value2 …… :从右……( …… r:right)
lrange listname int1 int2 :从左取值展示,取下标为 int1 至 int2 间的数据(l : list / int为负数时表示从右计算下标)
lpop listname :将左边第一个数据弹出并返回
rpop listname :将右边第一个数据弹出并返回
llen listname :返回list的长度
lpushx / rpushx :从左/右设置……(list不存在将不会添加)
lrem listname count value :删除count个val = value的值(l : list / rem : remove / 例 :count = 2时从左至右删除两个 / count = -2时从右至左删除两个 / count为0时删除所有val = value的值)
lset listname int value :将list中下标为int的数据替换为value(下标输入有误则会报错)
linsert listname before / after value value_insert :在值为value的数据前 / 后新增数据,值为value_insert
rpoplpush listname1 listname2 :将name为listname1的尾部数据弹出,push到name为listname2的数据头部(r : right / l : left)
消息队列使用场景:若消费者取出数据后来不及使用就崩溃了,我们的数据就会丢失,相应的业务逻辑也会出现问题。我们可以使用rpoplpush将消息先存放到一个备份list中,待消费者完成业务逻辑使用完数据后再将备份list中的对应数据删除就可以解决消息丢失的问题
4.set :
sadd setname value1 value2 …… :设置name为setname的set的value值(返回影响条数)
srem setname value1 value2…… :删除set中值为value的元素(s : set / rem : remove / 返回影响条数)
smembers setname :返回所有的值
sismember setname value :判断set中有没有val = value的值,是则返回1、否返回0(s : set / is : is)
sdiff setname1 setname2 :返回set1中存在但set2中不存在的数据(diff : different)
sinter setname1 setname2 :返回set1和set2中都存在的数据
sunion setname1 setname2 :返回两个set中的所有元素并去重
scard setname :返回set中元素的数量
srandmember setname :随机返回set中的一个值(rand : rand)
sdiffstore setname3 setname1 setname2 :将set1中存在但set2中不存在的数据存入到set3中(谨慎使用 若set3已存在,原有数据将会被删除)
sinterstore setname3 setname1 setname2 :将set1和set2中都存在的数据…… (谨慎使用 ……)
sunionstore setname3 setname1 setname2 :把set1和set2中去重后的所有数据…… (谨慎使用 ……)
5.sorted set :
zadd sortedsetname score1 value1 score2 value2 …… …… :设置name为sortedsetname的sortset的值以及值对应的分数
zscore sortedsetname value :查询sortset中val = value的值对应的score
zrem sortedsetname value1 value2 …… :删除sortset中的值(返回影响条数)
zcard sortedsetname :返回sortset中元素的数量
zrange sortedsetname int1 int2 :从左取值展示,取下标为 int1 至 int2 间的数据(int为负数时表示从右计算下标 / 按分数分数正序展示)
zrange sortedsetname int1 int2 withscores :从左……取……的数据和分数(…… / ……)
zrevrange sortedsetname int1 int2 withscores :从左……取……的数据和分数(…… / 按分数倒序展示)
zremrangebyrank sortedsetname int1 int2 :删除下标为int1至int2间的数据
zremrangebyscore sortedsetname score1 score2 :删除分数score1至score2间的数据
zrangebyscore sortedsetname score1 score2 :取分数为score1至score2之间的数据展示
zrangebyscore sortedsetname score1 score2 withscores limit int1 int2 :取……之间的分数以及数据展示并limit int1 int2(包头不包尾)
zincrby sortedsetname int value :将sortset中值为value的数据的分数➕int并返回更新后的score
zcount sortedsetname score1 score2 :返回分数在score1至score2间的数据数量
6.redis keys的通用操作
keys * :查询redis中所有的key
keys string* :查询以string开头的key
del keyname1 keyname2 :删除key以及key中的数据
exists keyname :查询key是否存在,是则返回1、否返回0
rename keyname newkeyname :重命名
expire keyname int_time :设置key的过期时间,单位为秒
ttl keyname :查询返回key还有多少秒过期
type keyname :查询key的类型(string / hash / set / zset / list)
flushall :清空数据库(慎用!)
二、redis的特性
1.redis数据库概念
一个redis实例最多十六个数据库,下标分别为0 - 15。客户端连接的时候可以指定连接到哪一个数据库,默认连接到0
2.移动key到某个数据库
move keyname xiabiao :下标必须是1 - 15,例:move string1 5(即将keyname为string1的key移动到6号数据库)
3.redis的事务
可以使用multi / exec / discard来实现redis事务
multi :开启事务
exec :事务提交
discard :事务回滚
三、redis的持久化
1.RDB持久化
默认支持不需要开启
在指定的时间内将数据写入磁盘
优势:
整个redis的数据库将会只包含一个文件,一旦系统出现灾难性事件,将会非常容易恢复
性能最大化
如果redis数据集很大,RDB策略的启动效率会更高
劣势:
无法保证数据安全性
2.AOF持久化
需要配置开启
以日志的形式持久化数据,在redis启动之初会先读取日志来重新构建数据库
redis支持每秒同步、每修改同步、不同步三种策略
优势:
可以带来更高的安全性
有很好的策略来解决数据一致性的问题
如果日志过大,redis会启动重写机制,以append模式不断将修改的数据写入老磁盘文件中,此期间进入redis的请求会被记录进一个新文件,保证数据的一致性和安全性
可以通过日志文件来完成数据的重建
劣势:
对于相同数量的数据集,aof生成的文件要比rdb生成的文件大一些
运行效率低于RDB
3.无持久化
持久化可以关闭
4.同时使用RDB和AOF
打开 aof 不关闭 rdb 就可以
本文来自博客园,作者:荣慕平,转载请注明原文链接:https://www.cnblogs.com/rongmuping/articles/16182454.html