redis的String和List数据类型的使用

286 阅读3分钟

本人已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

大家好,我是掘金新用户小钻风头领,今天是我正式更文的第五天;

String

set name "goudan"	#存一个key为name的值为goudan
get name 			#取值 name为key
key *				#获得所有的key
EXISTS name			#判断一个key是否存在
APPEND key "xxx" 	#追加字符串	没有此key的话就相当于set key

## i++  适用于浏览量+1
set views 0		#创建初始化为0
get views 		#查看
incr views		#自增1
decr views		#减1
INCRBY views 10	#设置步长
DECRBY views 5	#步长-5

## 取出某些个字符
GETRANGE key 0 3	#获取开头到3的字符	-1是全部		0 1 2 3

##添加字符串
set key1 aaaaa
setrange key1 1 bb	#插入bb到下标1 	abbaaaa

##setex(set with expire) 设置过期时间
##setnx(set if not exist) 不存在则设置	分布式锁中常用
setex key2 30 "alal"	#设置key2的值为alal,30秒过期
setex mykey "lph" 		#如果mykey不存在,就创建mykey
setex myley "lpggg"		#如果存在 则创建失败

##同时设置多个值
mset 
mget

mset k1 v1 k2 v2 k3 v3 	#一次设置多个值
key *					#获得所有的key
	"k1"
	"k2"
	"k3"
mget k1 k2 k3 			#取出所有的值
	"v1"
	"v2"
	"v3"
msetnx k1 v1 k4 v4 		#原子型操作 要么都成功 : ? 	

#对象
set user:1{name:zhangsan,age:12}

mset user:1:name lisi 		#创建一个user对象 name age address
	 user:1:age 20
	 user:1:adderss beijing
mget user:1:name user:1:age user:1:address	#取出user:1:name的值等。。

##getset 先获取在设置值
getset age 90		#如果不存在值 返回null
	null
get age 
	90
getset age 20		#如果存在值 先返回 
	90
get age 			#在显示新存的
	20

List

在redis里 list可以做栈,队列,阻塞队列 ,值可重复

#list命令都是L开头
Lpush list one 		#push 存值
Lpush list two 
Lpush list three
LRANGE 0 -1 		#取出所有	
	"three" "tow" "one" 	#先进先出
Rpush list zoom
	LRANGE 0 -1
		three tow one zoom 	#插入到最右边

#移除
LPOP	#移除左边的 也就是最后存进去的
RPOP	#移除右边的 也就是第一个存进去的
LPOP list 	#移除列表的第一个元素
	 tow one 	
RPOP list 	#移除列表的最后一个元素
	 tow 	
#下标 
Lindex
lindex list 1

#移除指定的值
lrem
lrem list  1 one #代表移除1个元素 one 
lrem list  2 three #代表移除2个元素 three

#Trim
Ltrim  #截取需要的
Lpush mylist "a"	
Lpush mylist "b"
Lpush mylist "c"
Lpush mylist "d"
	d c b a 
ltrim 1 2
	c b
	
#RPOPLPUSH 	截取现有list的最后一个元素到一个新的list
Lpush mylist "a"	
Lpush mylist "b"
Lpush mylist "c"
Lpush mylist "d"

rpoplpush mylist newmylist 
#此时的mylist 
	#a b c 
#此时的newmylist
	#d

#lset 更改指定下表的值
lset list 0 ggogog		#将list下标为0 的值 改为 ggogog 下标不存在值就会报错

#LINSERT  插入值到某个元素的后面或前面
linsert mylist before "那个元素" "要插入的值"		#在某个元素前插入什么值
linsert mylist after "a" "b"		#在a元素后插入b

##list总结:
	实际就是一个链表 before node after left	rigth 都可以插入值
	如果key不存在,创建新的链表
	如果key存在,新增内容
	如果移除key 那么就成了一个空链表
	两边插入 和 修改值效率最好
消息队列:左边进去右边出 (lpush rpop)	
栈:左边进去左边出 (lpush lpop)