Redis笔记

redis笔记

redis几大基本类型

基础语法

set key1 v1  			设置值
get key1    			取值
keys * 				获得所有的key
exists key1 			判断key是否存在
append key1 hello  			追加字符串,如果key不存在,相当于set key
strlen key1			获得字符串长度
incr key1	 			加一
decr key1				减一
incrby key1 10        			加10	
decrby key1 10  			减10
flushdb 				清空当前库数据
getrange key1 0 3			截取0到3的字符串
setrange key2 1 hh  		把下标为1的字符替换成 hh
setex key3 30 "hello"		设置30秒过期并把值设置为hello
ttl key3				查看还有多少过期
setnx key3 "hah"			不存在才能设置,存在设置无效
mset k1 v1 k2 v2 k3 v3 k4 v4  	批量设置值
mget k1 k2 k3 k4			批量取值
msetnx k1 v1 k5 v5  		如果这些key都不存在,则批量赋值,是一个原子性操作
mset user:1:name shangsan user:1:age 2	  	把user1的name赋值为zhangsan,user1的age为2
mget user:1:name			取出user1的name的值

127.0.0.1:6379> getset db redis 	如果不存在db的值,则返回nil
(nil)
127.0.0.1:6379> get db		
"redis"
127.0.0.1:6379> getset db mongodb 	如果存在值,则设置新的值,返回当前值 getset就是先取值在存值
"redis"
127.0.0.1:6379> get db
"mongodb"

config set requirepass 123456		设置redis密码
auth 123456			用密码登录

string类型

incr key1	 			加一
decr key1				减一
incrby key1 10        			加10	
decrby key1 10  			减10
flushdb 				清空当前库数据
getrange key1 0 3			截取0到3的字符串
setrange key2 1 hh  		把下标为1的字符替换成 hh
setex key3 30 "hello"		设置30秒过期并把值设置为hello
ttl key3				查看还有多少过期
setnx key3 "hah"			不存在才能设置,存在设置无效
mset k1 v1 k2 v2 k3 v3 k4 v4  	批量设置值
mget k1 k2 k3 k4			批量取值
msetnx k1 v1 k5 v5  		如果这些key都不存在,则批量赋值,是一个原子性操作
mset user:1:name shangsan user:1:age 2	  	把user1的name赋值为zhangsan,user1的age为2
mget user:1:name			取出user1的name的值

127.0.0.1:6379> getset db redis 	如果不存在db的值,则返回nil
(nil)
127.0.0.1:6379> get db		
"redis"
127.0.0.1:6379> getset db mongodb 	如果存在值,则设置新的值,返回当前值 getset就是先取值在存值
"redis"
127.0.0.1:6379> get db
"mongodb"

list类型

127.0.0.1:6379> lpush list one  		l表示left,将一个值或者多个值插入列表头部
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> lrange list 0 1
1) "two"
2) "one"
127.0.0.1:6379> lrange list 0 0
1) "two"

127.0.0.1:6379> rpush list right 		r表示right,将一个值插入到最后

lpop list				移除头部,也就是列表第一个元素
rpop list				移除尾部,也就是最后一个元素
lindex list 0			通过下标获得list下的某一个值
llen list				返回list的长度
lrem list 2 three			删除内容为three的list里的元素并且只删除两个
ltrim list 1 2			截取list下标为1,2的两个值
rpoplpush list mylist		移除list的最后一个元素放入mylist的头部
lset list 0 haha			把list的第0个元素替换成haha
linsert list before "world" "haha"  	在world之前插入haha
linsert list after "world" "xixi"		在world后面插入xixi

set 类型

set中不能有重复值
sadd set hello 		在set中添加hello
smembers set		查看set中的元素
sismember set hello		是否存在hello
scard set			查看set有几个元素
srem set hello		删除hello
srandmember set		在set里面随机取出一个元素
spop set			随机删除一个元素
smove set set2 hello	把set里面的hello放到set2头部
sdiff set1 set2 		取出set1有set2没有的元素
sinter set1 set2		取出set1和set2的交集
sunion set1 set2		取出set1和set2的并集

map类型

hset hash key1 xiaojie		添加一个hash的key为key1,value为xiaojie
hget hash key1			获得hash里面的key1的value
hmset hash key2 haha key3 xixi	批量插入
hmget hash key2 key3		批量获取
hgetall hash			获得hash的所有值
hdel hash key1			删除hash中的key1
hlen hash				获得hash的长度
hexists hash key2			判断hash的key2是否存在
hkeys hash			获取hash所有的key
hvals hash			获取hash所有的value
hincrby hash key3 1			使得key3加一
hincrby hash key3 -1		减一
hsetnx hash key2 haha		如果有值则不能赋值,没有值才赋值为haha

zset类型

zadd set 1 one			添加一个one,标记为1
zrange set 0 -1			获取所有元素
zadd salary 2500 xiaohong 5000 zhangsan 500 xiaojie  	给小红张三小杰各发了工资,进行排序,利用标志
zrangebyscore salary -inf +inf				用工资排序,从小到大,-inf为-&,+inf为+&
zrangebyscore salary -inf +inf withscores		排序并且显示工资
zrangebyscore salary -inf 2500 withscores		在-&到2500工资以内的进行排序显示出来
zrem salary xiaohong				移除小红
zcard salary			查看长度
zrevrange salary 0 -1			从大到小排序薪水
zcount set 1 2		查看区间里面的成员数量

redis三大特殊类型

bitmaps

记录周一到周日的打卡
周一:1 ;周二:0 ............................
127.0.0.1:6379> setbit sign 0 1
(integer) 0
127.0.0.1:6379> setbit sign 1 0
(integer) 0
127.0.0.1:6379> setbit sign 2 0
(integer) 0
127.0.0.1:6379> setbit sign 3 1
(integer) 0
127.0.0.1:6379> setbit sign 4 1
(integer) 0
127.0.0.1:6379> setbit sign 5 0
(integer) 0
127.0.0.1:6379> setbit sign 6 0
(integer) 0

127.0.0.1:6379> getbit sign 3		查看周四是否打卡
(integer) 1

127.0.0.1:6379> bitcount sign  	查看一周打卡了多少天
(integer) 3

geoaptial

geoadd china:city 116.40 39.90 beijin		添加一个中国的城市北京,经纬度为116.4,39.9
geopos china:city beijin chongqing		获得北京和重庆的经纬度
geodist china:city beijin shanghai		获得北京到上海的距离
georadius china:city 100 30 1000 km		在以经纬度100,30为中心,方圆1000km有多少城市
georadius china:city 100 30 1000 km withcoord	查询并且显示经纬度
georadius china:city 100 30 1000 km withdist withcoord count 2	查询并且只显示两个城市
georadiusbymember china:city beijin 1000 km	以北京为中心1000km有多少城市
127.0.0.1:6379> geohash china:city beijin chongqing    	将二维的经纬度表示成一维的字符串
1) "wx4fbxxfke0"
2) "wm5xzrybty0"


zrange china:city 0 -1		查看所有城市,具体查删除可参考zset

Hyperloglog

pfadd set a b c d e f i g h i j 			添加元素
pfcount set				查看不重复元素个数
pfmerge set3 set set2			把set和set2合并到set3里且不允许有重复的	

redis乐观锁

很乐观,认为什么时候都不会出现问题,所以不会上锁,更新数据的时候去判断一下,在此期间是否有人修改过这个数据

127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> set out 0
OK
127.0.0.1:6379> watch money		监视钱,乐观锁
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> decrby money 20
QUEUED
127.0.0.1:6379> incrby out 20
QUEUED
127.0.0.1:6379> exec
1) (integer) 80
2) (integer) 20

127.0.0.1:6379> watch money
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> DECRBY money 10
QUEUED
127.0.0.1:6379> INCRBY out 10
QUEUED
127.0.0.1:6379> exec
(nil)			修改失败,因为用第二个线程改了money的值

然后解锁unwatch
在加锁 watch money
在操作
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值