Redis学习笔记

什么是Redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

redis的官网地址,非常好记,是redis.io。(特意查了一下,域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)。

redis [2] 的作者,叫Salvatore Sanfilippo,来自意大利的西西里岛,现在居住在卡塔尼亚。目前供职于Pivotal公司。他使用的网名是antirez。(源自百度百科)

Redis有哪些数据类型

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括 s t r i n g ( 字 符 串 ) \color{red}{string(字符串)} string() l i s t ( 顺 序 表 、 链 表 ) \color{red}{list(顺序表、链表)} list() s e t ( 集 合 ) \color{red}{set(集合)} set() z s e t ( s o r t e d s e t − − 有 序 集 合 ) \color{red}{zset(sorted set --有序集合)} zset(sortedset) h a s h ( 哈 希 类 型 ) \color{red}{hash(哈希类型)} hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。

Redis数据操作命令

1.string 数据操作命令

创建一个key为company,值为string类型的key-value
set company imooc
获取key为company的值
get company
删除名为company的key
del company
增加key为num的值,每次加1,返回计算结果
incr num
减少key为num的值,每次减一,返回计算结果
decr num
增加key为num的值,制定加5,返回计算结果
incrby num 5
减少key为num的值,制定减5,返回计算结果
decrby num 5
给key为company的字符串追加值,返回结果为追加后的字符串的长度,key不存在会自动创建
append company 123

2.hash 数据操作命令

  • String Key 和 String Value的map 容器
  • 每一个Hash可以存储4294967295个键值对

创建key为myhash 包含一个key为username,值为jack键值对的hash类型key-value
hset myhash username jack
获取myhash中key为username的值
hget myhash username
一个获取myhash中多个key的值
hmget myhash username age
获取myhash中所有的键值对
hgetall myhash
删除myhash中key为username的键值对
hdel myhash username
删除myhash
del myhash
给myhash设置多个键值对
hmset myhash username rose age 21
给myhash中key为age的值加5,返回计算结果
hincrby myhash age 5
判断myhash中是否存在key为username的键值对,
1表示存在,0表示不存在
hexists myhash username
获取myhash的长度,也是键值对的数量
hlen myhash
获取myhash中所有的key值
hkeys myhash
获取myhash中所有的value值
hvals myhash

3.list 数据操作命令

两种存储方式,顺序表或链表

  • ArrayList使用数组存储方式
  • LinkedList 使用双向链表方式
  • Redis的列表使用链表实现

从左侧往mylist添加元素,返回list长度
lpush mylist a b c
从右侧往mylist2添加元素
rpush mylist2 a b c
从左往右获取mylist中下标0-5的元素,下标可为负数,-1表示最后一个元素,以此类推
lrange mylist 0 5
从mylist中弹出最左侧的元素,即弹出头部的元素
lpop mylist
从mylist中弹出最右侧的元素,即弹出尾部的元素
rpop mylist
获取mylist的长度
llen mylist
当指定mylist存在时,往mylist中最左侧添加元素
lpushx mylist x
当指定mylist存在时,往mylist中最右侧添加元素
rpushx mylist x
删除mylist中count个为value的元素,count为负数,则从后往前遍历,count为0,则删除所有值为value的元素
lrem mylist 2 3
给mylist中指定的下标设置新值
lset mylist 3 mmm
在mylist中第一个值为b的元素之前插入元素11
linsert mylist before b 11
在mylist中第一个值为b的元素之后插入22
linsert mylist after b 22
将mylist5弹出的元素放入mylist6中
rpoplpush mylist5 mylist6

4. set 数据操作命令

  • 和list类型不同的是,set集合中不允许出现重复。
  • set可包含的最大元素数量是4294967295。

往myset中添加a b c
sadd myset a b c
删除myset中的1 2,返回删除数量
srem myset 1 2
获取myset中的所有元素
smembers myset
判断元素a是否是myset的成员
sismemeber myset a
求mya1 和 myb1集合的差集
sdiff mya1 myb1
求mya2 和 myb2集合的交集
sinter mya2 myb2
求mya3 和 myb3集合的并集
sunion mya3 myb3
获取myset集合中元素的个数
scard myset
随机获取myset的成员
srandmember myset
将mya1 和 myb1的差集存储到新集合my1上,同理,交集和并集也可以这样用
sdiffstore my1 mya1 myb1

5.sorted-set 数据操作命令

  • sorted-set 和 set区别
    sorted-set是有序的set集合,它使用分数来对元素进行排序,每个元素都记录了分数。

往mysort中添加元素,分数分别为70 80 90
zadd mysort 70 zs 80 ls 90 ww
往mysort中添加100 zs,如果元素zs已经存在,则修改分数,返回结果为0,否则返回添加元素的个数
zadd mysort 100 zs
获取mysort中元素zs的分数
zscore mysort zs
获取mysort的长度,元素个数
zcard mysort
删除mysort中的元素 tom ww
zrem mysort tom ww
获取mysort中从下标0到-1的元素
zrange mysort 0 -1
获取mysort中从下标0到-1的元素,显示分数
zrange mysort 0 -1 withscores
倒序输出mysort从下标0到-1的元素
zrevrange mysort 0 -1 withscores
按照排名范围删除元素
zremrangebyrank mysort 0 4
按照分数范围删除元素
zremrangebyscore mysort 80 100
查询分数从0到100的元素,限定只获取从0开始的两个元素
zrangebyscore mysort 0 100 withscores limit 0 2
给mysort中ls元素的分数加3
zincrby mysort 3 ls
获取mysort中ls的分数
zscore mysort ls
获取mysort中分数在80到90之间的元素个数
zcount mysort 80 90

keys的通用操作

获取所有的key
keys *
查找包含my字符串的key
keys my?
判断key是否存在
exists my1
删除key
del my1
重命名key
rename company newcompany
设置key的过期时间,单位second
expire newcompany 1000
查看key所剩时间,没有设置过期时间,返回-1
ttl newcompany
查看key的类型
type myhash

Redis的特性

  • Redis包含多数据库
  • 一个Redis服务最多可提供16个数据库,从0开始

连接指定的数据库
select 0
移动key到指定数据库
move myset 1

  • Redis支持事务操作
    Redis的事务由 m u l t i \color{red}{multi} multi e x e c \color{red}{exec} exec d i s c a r d \color{red}{discard} discard三个命令组合执行
    m u l t i \color{red}{multi} multi相当于关系型数据库中的 b e g i n T r a n s a c t i o n \color{red}{beginTransaction} beginTransaction
    e x e c \color{red}{exec} exec相当于 c o m m i t \color{red}{commit} commit
    d i s c a r d \color{red}{discard} discard相当于 r o l l b a c k \color{red}{rollback} rollback(回滚)。

开启redis事务
multi
设置key为a1,值为123的key-value
set a1 123
设置key为b1,值为456的key-value
set b1 456
提交事务
exec

Redis的持久化

redis的持久化使用方式有:

  • RDB持久化
  • AOF持久化
  • 无持久化
  • 同时使用RDB和AOF
    RDB:redis会周期性的把更新的数据写入磁盘。
    AOF:redis把修改操作写入追加的记录文件 。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值