Redis使用简记
Redis使用简记
ELIX清除当前数据库 (默认16个数据库,0—15)flushdb
清除全部数据库的内容 FLUSHALL
查看所有的keykeys *
设置key过期时间EXPIRE name 10
查看当前key的剩余时间ttl name
查看当前key的一个类型type name
判断某一个key是否存在EXISTS key1
追加字符串,如果当前key不存在,就相当于setkeyAPPEND key1 "hello"
可以设置步长,指定增量INCRBY views 10
截取字符串 [0,3]GETRANGE key1 0 3
设置key3 的值为 hello,30秒后过期setex key3 30 "hello"
如果mykey 不存在,创建mykey;如果mykey存在,创建失败setnx mykey "redis"
同时设置多个值mset k1 v1 k2 v2 k3 v3
同时获取多个值mget k1 k2 k3
以上同时操作存在原子性,同时成功或同时失败。
设置一个user:1 对象 值为 json字符来保存一个对象set user:1 {name:zhangsan,age:3}
1 | mset user:1:name zhangsan user:1:age 2 |
如果不存在值,则返回 nil,如果存在值,获取原来的值,并设置新的值getset db redis
List操作
l list r
将一个值或者多个值,插入到列表头部 (左)LPUSH list one
展示列表中所有的值LRANGE list 0 -1
移除list的第一个元素Lpop list
通过下标获得 list 中的某一个值!lindex list 1
返回列表的长度Llen list
通过下标截取指定的长度,这个list已经被改变了,截断了只剩下截取的元素ltrim mylist 1 2
移除列表的最后一个元素,将他移动到新的列表中rpoplpush mylist myotherlist
将某个具体的value插入到列把你中某个元素的前面或者后面!LINSERT mylist before "world" "other"
Set操作
set集合中添加匀sadd myset "hello"
查看指定set的所有值SMEMBERS myset
判断某一个值是不是在set集合中SISMEMBER myset hello
获取set集合中的内容元素个数 scard myset
移除set集合中的指定元素srem myset hello
随机抽选出指定个数的元素 SRANDMEMBER myset 2
随机删除一些set集合中的元素spop myset
将一个指定的值,移动到另外一个set集合smove myset myset2 "kuangshen"
交集SINTER key1 key2
并集SUNION key1 key2
Hash操作
本质和String类型没有太大区别,还是一个简单的key-vlaue
hash 更适合于对象的存储,String更加适合字符串存储
set一个具体 key-vlauehset myhash field1 kuangshen
获取一个字段值hget myhash field1
获取hash表的字段数量hlen myhash
只获得所有fieldhkeys myhash
只获得所有valuehvals myhash
Zset有序集合操作
在set的基础上,增加了一个权重值
添加一个值zadd myset 1 one
显示全部的数据按权重从小到大ZRANGEBYSCORE salary -inf +inf
从大到进行排序ZREVRANGE salary 0 -1
显示全部的用户并且附带成绩ZRANGEBYSCORE salary -inf +inf withscores
显示工资小于2500员工的升序排序ZRANGEBYSCORE salary -inf 2500 withscores
移除有序集合中的指定元素zrem salary xiaohong
获取指定区间的成员数量zcount myset 1 3
Geospatial 地理位置
Redis GEOADD 命令_将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
添加地理位置(一般从数据集直接导入)geoadd china:city 116.40 39.90 beijing
获取指定的城市的经度和纬度GEOPOS china:city beijing
查看上海到北京的直线距离GEODIST china:city beijing shanghai km
以110,30 这个经纬度为中心,寻找方圆1000km内的城市GEORADIUS china:city 110 30 1000 km
找出位于指定元素周围的其他元素GEORADIUSBYMEMBER china:city beijing 1000 km
将二维的经纬度转换为一维的字符串geohash china:city beijing chongqi
GEO 底层的实现原理其实就是 Zset!我们可以使用Zset命令来操作geo
移除指定元素zrem china:city beijing
Hyperloglog
优点:占用的内存是固定,2^64 不同的元素的技术,只需要废 12KB内存!如果要从内存角度来比较的
话 Hyperloglog 首选。存在0.81% 错误率! 统计UV任务,可以忽略不计
创建第一组元素 mykeyPFadd mykey a b c d e f g h i j
统计 mykey 元素的基数数量PFCOUNT mykey
Bitmap
1 | BASH |
好像数组存储,值只有0 1
统计1的数量bitcount sign
事务
Redis事务没有没有隔离级别的概念
Redis单条命令式保存原子性的,但是事务不保证原子性
开启事务multi
命令入队
执行事务exec
取消事务DISCARD
异常类型:
- 编译型异常(代码有问题,命令有错) ,事务中所有的命令都不会被执行
- 运行时异常(1/0), 如果事务队列中存在语法性,那么执行命令的时候,其他命令是可以正常执行的,错误命令抛出异常
监视(watch)
乐观锁,更新数据的时候去判断一下,在此期间是否有人修改过这个数据。即通过version判断是否一致。
若没有变化,可以执行,有变化则执行失败。
监视命令:watch name
密码
设置密码:config set requirepass "psw"
查看密码:config get requirepass
登录:auth "psw"
主从复制
作用:
1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务
的冗余。
3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务
(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写
少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
4、高可用(集群)基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复
制是Redis高可用的基础。
配置:
查看当前库的信息info replication
需要修改配置文件(redis.conf),每个节点需要对应一个配置文件,主要修改以下信息:
1、端口
2、pid 名字
3、log文件名字
4、dump.rdb 名字
设置从节点,配置主节点地址(暂时有效,若要一直配置,在配置文件中设置):SLAVEOF 127.0.0.1 6379
自己当主机!SLAVEOF no one
如果主节点有密码,需要在从节点配置文件中设置masterauth psw
主从同步原理:
Slave 启动成功连接到 master 后会发送一个sync同步命令
Master 接到命令,启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行
完毕之后,master将传送整个数据文件到slave,并完成一次完全同步。
全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
增量复制:Master 继续将新的所有收集到的修改命令依次传给slave,完成同步
但是只要是重新连接master,一次完全同步(全量复制)将被自动执行! 我们的数据一定可以在从机中
看到
哨兵模式
开启:
先配置哨兵配置文件sentinel.conf
启动哨兵redis-sentinel kconfig/sentinel.conf
1 | BASH |
优点:
1、哨兵集群,基于主从复制模式,所有的主从配置优点,它全有
2、 主从可以切换,故障可以转移,系统的可用性就会更好
3、哨兵模式就是主从模式的升级,手动到自动,更加健壮!
缺点:
1、Redis 不好啊在线扩容的,集群容量一旦到达上限,在线扩容就十分麻烦!
2、实现哨兵模式的配置其实是很麻烦的,里面有很多选择!