首先还是概念:
你想要用好redis,那么你要清楚它有哪些数据类型
一共5种数据类型:如下(我们项目中常用的也就是String 和 hash类型)
- String (字符串)
- Hash (哈希)
- List (字符串列表)
- set(字符串集合)
- SortSet(有序字符串集合)
我这里只讲三种:String 类型,Hash类型和SortSet类型
我们知道redis,是以key-value键值对的形式存储数据的,那么关于key的
定义我这里要强调一下注意点:
1.key的长度不要太长 (不要超过1024个字节),否则会影响查找效率。
但是也不要过短,如设置一个key为a,这样可读性较差。
2.最好有统一的命名规范。
接下来我们来看String类型的常用命令:
- 赋值 (set)| set age 18
- 取值 (get)| get age
keys 获取所有key- 先获取key的值再赋值 (getset) getset age 20
- 删除一个key(del) | del age
- 自增,加1操作 (incr) | incr a ,这里如果a这个变量没有那么自动创建并赋值为0,加1,如果有是整型则加1,如果为字符类型,则提示错误信息。
- 递减,减1操作 (decr) | decr b, 这里如果a这个变量没有那么自动创建并赋值为0,减1,成为-1,如果有是整型则-1,如果为字符类型,则提示错误信息。
- 一次性增加几 (incrby)| incrby a 5 ,如果初始值为0,那么现在为5
- 一次性减几 (decrby) | decrby a 5 …
- 在原有key所对应的value值上,拼接字符串。(append)| append a 5 ,如果a=1,那么现在为 15.
看Hash类型的常用命令:
存储string key 和string value 的map类型容器
- hset 设置值 hset persion age 18 ,hset persion name ‘zhangsan’
- hmset ----同时存放多个键值对对象,hmset persion age 18 name ‘lisi’
- hget 取值 hget persion age --------=18
- hmget 同时获取多个属性值 hmget persion age name
- hgetall 获取所有的键值对属性值 hgetall persion
- hdel 删除指定键值对 hdel persion name
- del 删除整个集合 del persion
- hincrby 增加值 hincrby persion age 5
- hexists 判断某个值是否存在 hexists persion name 返回 1
- hlen 获取集合中有几个属性 hlen persion 返回 2
- hkeys 获取所有属性名 hkeys persion ,返回 name age
- hvalues 获取所有属性值 hvalues persion 返回 lisi 18
看Sorted Set类型的常用命令:
sorted set 不允许元素重复,存储string类型的集合。它中每一个元素都会有一个分数与子关联,所有里面的元素是从小到大排序好的。它的访问获取效率是非常高效的。
- zadd (添加) zadd mySort 70 zhang 80 li 90 wang,此时,我再增加一个元素 zadd mySort 100 zhang 它会覆盖原有的分数 80
- zscore (获取对应值的分数) zscore mySort wang -----90
- zrem (删除) zrem mySort zhang
- zrange(显示从小到大的顺序)zrange mySort 0 -1
zhang
li
wang
如果带上withscores 参数 zrange mySort 0 -1 withscores
zhang
70
li
80
wang
90
- zrevrange 从大到小排序 zrevrange mySort 0 -1 withscores
- zremrangebyscore 按照分数范围进行删除 zremrangebyscore mySort 80 90
redis的特性:
- 多数据库
-默认是16个数据库 ,下标从0开始,到15 ,默认链接的是0号数据库
选择数据库命令: select 1 就选择了1号数据库
如果要讲0号数据库中的某个key移动到1号数据库,那么move a 1 - redis也支持事务
命令
multi 相当与开启事务,类比mysql中 begin trancation;
exec 提交事务,相当于mysql中 commit
discord 回滚事务,相当于 mysql中的rollback - redis的持久化
redis为什么是高性能的呢,因为redis的数据是保存到内存中的,读取的时候从内存中加载到硬盘,这个过程就是持久化
方式有俩种:我们可以单独使用其中一种,也可以俩着结合使用
1.RDB方式
定义:在相同的时间间隔中,将内存中的数据快照写入到磁盘。
快照保存的路径就在当前路径下的文件叫dump.rdb
默认支持的,不需要配置
在redis中有一个redis.conf 文件 中有如下:
#每900s,也就是,每15分钟如果有一个key发生变化,那么会持久化一次(也就是到内存的一次快照)
save 900 1
#每300s,也就是,每5分钟如果有10个key发生变化,那么会持久化一次(也就是到内存的一次快照)
save 300 10
#每60s,也就是,每1分钟如果有10000个key发生变化,那么会持久化一次(也就是到内存的一次快照)
save 60 10000
2.AOF方式
定义:以日志的形式追加 append
此方式需要配置,也在redis.conf 文件中
它里面有一个属性是: appendonly no 需要将其设置为yes ,此后会生成一个名叫appendonly.aof的文件。
它的同步策略有3种分别为:需要选择其中一种,一般为修改一次就同步
appendfsync always 每修改一次就同步
appendfsync everysec 每秒同步一次到硬盘
appendfsync no 不同步