redis学习
作者:
学不会就开摆
,
2022-08-25 09:05:11
,
所有人可见
,
阅读 232
redis五大数据类型
1:String(字符串)
2:List
3:Set
4:Hash
5:Zset(有序集合)
启动: redis-server kcongfig/redis.conf
redis-cli -p 6379
清除当前数据库:flushdb
清除所有数据库:flushall
查看所有key:keys *
移除当前key:move name 1
设置过期时间:EXPIRE name 10
查看当前剩余key的时间:ttl name
查看当前key的类型:type name
查看是否存在key:EXISTS name
在key后面添加字符串:APPEND name "hello"
查看key的长度:STRLEN name
对阅读量进行增加1:1.set views 0
2.incr views
对阅读量进行减少1:1.set views 0
2.decr views
对阅读量进行增加x:1.set views 0
2.incrby views x
对阅读量进行减少x:1.set views 0
2.decrby views x
从字符串的下标为0到3进行取值[0,3]:getrange name 0 3
取全部字符串:getrange name 0 -1
修改字符串(name:hello):setrange name 1 xx =>(hxxlo)
同时设置字符串以及过期时间:setex name 30 "hello"
创建key并判断key是否存在(如果存在返回OK,否则创建失败):setnx name "MongoDB"
一次性创建多个字符串:mset k1 v1 k2 v2 k3 v3
一次性得到多个字符串:mget k1 k2 k3
msetnx k1 v1 k2 v2:同时设置多个字符串(但是这个操作是原子性操作,只能两个同时成功或者同时失败)
设置user对象并给其赋值json字符串:mset user:1 {name:jdw,age:18}
getset name redis:如果不存在值,则返回nil,如果存在值,则返回set的结果,并返回新的值
list插入值 当使用lpush是往头节点插 类似于栈 rpush则是从尾节点插入
list移除值 当使用lpop则是从左边移除 rpop则是从右边移除
通过下标找值 lindex list 0 则是取首元素 rindex list 0 则是尾元素
返回列表长度:llen list
移除list集合中指定个数的value 精确匹配:lrem list 1 one
移除列表两边的元素:ltrim list 1 2(将索引为1到索引为2的保留,去掉其他的元素)
重建一个新的列表并将老列表的最后的元素删除:rpoplpush 老列表名 新列表名
将列表中指定下标的值替换为另外一个值:lset list 0 item(如果该列表或者下标不存在则会报错)
将某一个具体的value插入到列表中某个元素的前面或后面
小结:
列表相当于一个链表
如果移除了所有的值 空链表 也代表不存在
两边插入或者改动值 效率最高 中间元素 效率稍低
set 是无序不重复集合
往set里面插入值:sadd myset hello
查看set里面的所有值:smembers myset
判断set里面是否存在某个值:sismember myset hello (如果存在返回1 否则返回0)
移除set里面的某个值:srem myset hello
查看set里面剩余元素的个数:scard myset
随机抽取一个元素:srandmember myset
随机抽选出指定个数的元素:srandmember myset 2
随机删除一个元素:spop myset
将set1里面的元素移动到set2里面:smove set1 set2 value
查看set1和set2的差集 sdiff set1 set 2
查看set1和set2的交集 sinter set1 set 2
查看set1和set2的并集 sunion set1 set 2
Map集合,key-Map 键值对(值是map)
向hash里面存值:hset myhash name jdw
获取hash里面的值:hget myset name
一个hash存多个map:hmset myhash name1 jdw name2 zjy
获取一个hash里面的所有map:hgetall myhash
删除hash指定的key字段对应的value值:hdel myhash name
获取hash的长度:hlen myhash
获取hash里面所有的key:hkeys myhahs
获取hash里面所有的value:hvals myhahs
geospatial
地理位置添加地理位置信息(可一次性添加多个):geoadd china:city 39.90 116.40 beijing 22.52 114.05 shengzhen (参数是 经度 纬度 城市名)
获取某个城市的经纬度: geopos china:city beijing
获取两个地理位置的直线距离(默认单位为m,可以自己手动设置):geodist china:city beijing shanghai(km,mi(英里),ft(英尺))
查找某个经纬度半径范围内的城市(首先要添加城市的经纬度信息):georadius china:city 110(经度) 30(纬度) 500 km
查找某个城市半径范围内的城市(首先要添加城市的经纬度信息):georadius china:city beijing 500 km
查看一个或者多个位置的geohash(返回的是一个geohash字符串):geohash china:city beijing chongqin
删除一个城市信息:zrem china:city beijing
查看地图中全部的元素:zrange china:city 0 -1
添加一个zset(可一次性添加多个):zadd myset 1 one (2 two)
获取zset里面的所有值:zrange myset 0 -1
对zset进行排序(升序):zadd myzset 1 a
zadd myzset 2 b
zadd myzset 3 c
zrangebyscore myzset -inf +inf
对zset进行排序(降序):zrevrange salary 0 -1
显示工资低于2500的员工:zrangebyscore myzset -inf 2500 withscores
移除一个元素(zset移除元素是移除value):zrem salary xiaohong
获取zset集合中的元素个数:zcard salary
判断某个区间的元素个数(后面不是索引,而是value):zcount myset 1 3
使用Hyperloglog来进行技术统计:pfadd mykey a b c
pfadd mykey2 c d e f
pfcount mykey
对集合进行合并(重复的算一个):pfmerge mykey3 mykey mykey2
pfcount mykey3(结果为6)
Bitmaps位图,数据结构,操作二进制位来记录,就只有0和1两个状态
365天 = 365bit 1字节 = 8bit (46个字节左右)
使用bitmap来记录周一到周日的打卡
周一:1 周二:0 ....
setbit sign 0 1,setbit sing 1 0 ....
获得当天打卡记录:getbit sign 1 => 0
统计所有的打卡天数:bitcount sign
事务
Redis单条命令式保存原子性的,但是事务不保证原子性
Redis事务没有隔离级别的概念
所有的命令在事务中,并没有直接被执行,只有发起执行命令的时候才会执行(执行命令为exec)
开启事务:multi
命令入队:set k1 v1
get k1
当一个事务结束后(也就是发起执行命令后,该事务就自动结束了)
放弃事务:discard (事务队列中的事务都不会执行)
编译型异常(代码有问题!命令有错!),事务中所有的命令都不会被执行
运行时异常(1/0),如果事务队列中存在语法性错误,那么执行命令的时候,其他命令是可以正常执行的,错误命令抛出异常