redis入门

一、Redis简介

1.redis是美国Vmware公司开源的NoSQL数据库产品,基于Key-Value存储格式,可将数据保存在内存或者硬盘中

2.Redis是单线程模型的NoSQL数据库,由C语言编写,官方提供的数据可以达到100000+的QPS(每秒内查询的次数)

二、Redis的安装

2.1 redis的持久化

为了防止意外宕机丢失数据,redis提供了两种持久化的方式

RDB  AOF

2.2 redis常用参数

 三、redis的数据类型

3.1 redis字符串类型

String 类型既可以保存普通的文字,也可以保存序列化的二进制数据

String 类型最大可以存储 512M 数据 

set email sccot@111.com  //设置字符串键和值
get email     //获取String类型
del email     //删除

字符串指令(一)

getrange email  0 3  //获取截取的字符串内容

strlen  email        //获取字符串长度

setex city 5 beijing  //设置过期时间的key-value   

 字符串指令(二)

mset username sccot sex male   //设置多个KEY-VALUE

mget username sex            //获取多个KEY-VALUE

字符串指令(三)

append: 用在字符串结尾追加内容

字符串指令(四)

incr num   //数字自增加1

incrby num 20   //数字加上指定的整数值

incrbyfloat num 3.5   //数字加上浮点数

字符串指令(五)

decr num   //数字自减1

decrby num 20   //数字减去指定的整数值

字符串指令(六)

flushall  清除数据库

3.2 redis哈希类型

“哈希类型” 比较容易理解,它与 Python 中的字典结构比较类似,也是 key:value 这种数据结构的,相当于是在 redis 的 value 里面再定义了一次 key:value 这种数据结构

哈希指令(一)

HSET 命令:设置 "哈希表" 字段,可以多次执行,写入多个字段

HMSET 命令:设置 "哈希表" 多个字段,可以一次性执行,写入多个字段

hset 8000 ename Tom  //设置哈希字段
hset 8000 job SALESMAN

hmset 8000 ename Tom job SALESMAN deptno 10   //设置多个哈希字段

哈希指令(二)

hget:获取哈希表字段值

hget 8000 ename

hmget:获取多个哈希表字段值

hmget 8000 ename job deptno

hgetall:获取哈希表所有字段值

hgetall 8000

哈希指令(三)

hkeys 8000  //获取所有哈希表字段名

hlen  8000  //哈希表中字段数量

hexists 8000 job  //判断哈希表是否存在某个字段

哈希指令(四)

hvals:获取哈希表所有字段值

hvals 8000

hdel:删除哈希表字段

hdel 8000

哈希指令(五)

哈希加法运算(加法把值改成负数)

hincrby:让哈希表某个字段加上指定的整数值

hincrby 8000deptno 10

hincrbyfloat:让哈希表某个字段加上指定的浮点数

hincrbyfloat 8000 sal 350.5

3.3 redis列表类型

而当我们需要向 VALUE 中保存序列化的数据时,就可以使用 列表类型

rpush向 列表 的右侧添加元素
lpush向 列表 的左侧添加元素
lset修改 列表 中某个元素的值;(利用索引位)
lrange获取 列表 中所有的元素
rpush dname 技术部 质检部 人事部 财务部
lpush dname 秘书处
lset dname 2 销售部
lrange dname 0 -1

列表指令(一)

llen dname   //获取列表长度

lindex  dname 0   //获取列表某个元素

linsert dname before 秘书处 董事会   //在列表某个位置插入元素

列表指令(二)

命令功能
lpop删除 列表 最左侧的元素
rpop删除 列表 最右侧的元素
lrem删除 列表 中某个元素
lrem dname 1 scoot   //删除的是列表中的第一个sccot  1 并不是索引

3.4 redis集合类型

  • 在我们使用 “列表类型” 时,是可以向 “列表” 中存储相同的元素的。
  • 当我们希望 “元素” 不重复的时候,就可以使用 “集合类型” 了。

添加获取元素

命令功能
sadd向 集合 内添加元素
smembers

获取 集合 内所有的元素

sadd empno 9000   //可以单个增加
sadd empno 9001
sadd empno 9002

sadd emptno 9001 9002 9003   //可以一次增加多个

smembers emptno  //获取集合内所有元素

集合指令(一)

scard  emptno   //获取集合长度

sismember emptno 9000  //判断是否含有某个元素

srem emptno 9000 9001   //删除元素

del emptno    //删除记录

集合指令(二)

命令功能
spop随机删除 集合 内某个元素,并返回该元素的值
srandmember随机返回 集合 内指定数量的元素

spop enptno

srandmember empno 5

3.5 redis有序结合类型

有序集合是带有排序功能的集合,它继承了集合的特点,不能有重复的元素,因为有排名次序的存在,所以有序集合中的元素是有索引存在

有序集合指令(一)

有序集合是带有排序功能的集合,redis会按照元素分数值排序

命令功能
zadd定义一个有序集合;并向有序集合中添加元素
zadd keyword 0 'v1' 0 'v2' 0 'v3'
命令功能
zincrby增加元素分数值
zincrby keyword 1 'v1'

zincrby keyword 5 'v1'
命令功能
zrevrange提取有序集合中所有的元素,以降序的方式排列
zrevrange keyword 0 -1

有序集合指令(二)

zcard:获得有序集合长度

zcard keyword

zcount :查询某个分数值区间的元素数量

zcount keyword 5 10

zscore : 返回元素的分数值

zscore keyword 'v1'

有序集合指令(三)

zrange:获得有序集合的内容(升序)

zrange keyword 0 -1

 有序集合指令(四)

zrangebyscore:获得分数值区间内的集合内容(升序)

zrangebyscore keyeword 5 10  //查询分数值为5到10之间


zrangebyscore keyeword 5 (10  //大于5小于10 分数值

zrangebyscore keyeword 10000 +inf   //分数值在10000以上的有哪些

zrevrangebyscore:获得分数值区间内的集合内容(降序)

zrevrangebyscore keyword 10 5  //分数值在5到10之间的集合内容降序排,最大值写前面

 有序集合指令(五)

zrank:获得元素的升序排名(从0开始)

zrank keyword 'v1'

zrevrank:获得元素的降序排名(从0开始)

zrank keyword 'v1'

有序集合指令(五)

zrem:删除有序集合中的元素

zrem keyword 'v1' v2'

zremrangebyrank:删除排名区间内的元素

zremrangebyrank keyword 0 2 //删除排名前两位的

aremrangebyscore:删除分数值区间内的元素

zremrangebyscore keyword -inf (5000   //删除分数值为5000以下的,负无穷到5000

四、redis的key命令

del删除记录

del keyword

exists:判断是否存在某个key

exists key  //存在返回1,不存在返回0

expire:设置记录过期时间

expire key 5 //5秒钟后记录删除

pexpire:设置过期时间(毫秒)

pexpire keyword 5000

key命令(二)

expireat:设置记录的过期时间(UNIX时间戳)

expireat ename 1544803200

move:把记录迁移到其他逻辑库

move keyword 1

rename :修改key名称

rename ename emp

key命令(三)

persist:移除过程时间

persist keyword

type:用来判断value数据类型

type keyword

五、redis的事务机制

1.数据库引入事务机制是为了防止对数据文件直接操作的时候出现意外宕机,引发数据的错乱

2.undo和redo日志保证的业务操作的原子性

既然 “redis” 不具备 “undo” 与 “redo” 两种日志文件的存在,也就不具备了业务操作的 “原子性” ,那么 “redis” 的事务机制是用来做什么的呢?

“redis” 的事务机制被设计出来的目的其实是为了防止并发执行的时候,被其他操作插队用的。
“redis” 是异步单线程执行的,也就是一个线程对应所有的客户端。任何一个客户端发起了执行的命令,“redis” 就会执行。而不是说单线程对应了一个客户端,从头到尾只执行这一个客户端的命令;等到这个客户端执行完毕之后才会执行下一个客户端的命令,“redis” 的单线程并不是这样去执行的!而是当任何一个客户端上传了执行命令,“redis” 都会执行。
 

5.1 redis事务的特点

  • “redis” 与 “MySQL” 的 “ACID” 属性的区别,见下方表格:
序号属性RedisMySQL
1原子性NOYES
2一致性YESYES
3隔离性YESYES
4持久性NOYES

5.2 保证数据的一致性

为了保证事务的一致性,在开启事务之前必须要用watch命令监视要操作的记录

watch kill_num kill_user

5.3 如何开启事务

利用 multi 命令可以开启一个事务

multi

开启事务后所有的操作都不会立即执行,只有执行exec命令的时候才会批处理执行

incr kill_num   // kill_num增加1

rpush kill_user 9999

exec     //提交redis批处理执行,不提交上面的不会执行

5.4 事务取消

redis没有事务的回滚机制,所以不能保证原子性

事务在没有提交执行前,是可以取消事务的,如果事务已经提交执行,就无法取消了

multi 

...


discard  //取消事务

redis命令文档

http://doc.redisfans.com/index.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值