redis基本操作

行式数据库和列式数据库
1. OLAP分析型数据库 (列式数据库, 数据分析)
   > 计算均值, 比较大小, 求最大最小...等分析数据的时候速度快, 是将一个属性的数据存储到一起.
   > 只有取出所有的属性值之后才得到某一个对象的整体信息
2. OLTP事务型数据库(行式数据库, 增删改查)
   > 将一个个对象作为存储的单位, 在取出一个对象的所有信息的时候速度快. 只有当去除所有的对象的属性值之后才能对数据进行求均值, 比大小等等	

Redis-key基本命令

注 : 有时候命令没有提示, 可能是因为少输入了一个s

cd /usr/local/bin				#进入到redis软件的安装目录
redis-cli -p 6379				#开启,进入到127.0.0.1.6379>

set key_1 xiong
set key_2 22

get key_1

expire key_1 10					#设置过期时间,自动过期,cookie,session登录,缓存
ttl key_1						#查看剩余时间

move key_1 xiong				#移除当前的key,一般不这么用

keys *							#查看所有的key

exists key_1					#查看当前的key是否存在

type key_1						#查看类型

flushdb							#清空数据库

String类型

append key_1 helloworld			#向key_1后面追加"helloworld"
								#如果当前key不存在,就相当于set key_1
strlen							#获取字符串的长度

incr key_2						#加1
decr key_2						#减1
incrby key_2 10					#设置每次增加的步长为10

getrange key_1 0 3				#获取0-3的字符
getrange key_1 0 -1				#获取全部的字符串
setrange key_1 1 xxx			#用xxx替换字符串中的字符,从1号位置开始,替换数目和xxx相等

#msetnx操作是原子性的,要么一起成功,要么一起失败,但是 redis中的事务不是原子性的,可以有些成功有些失败

mset k1 v1 k2 v2 k3 v3 			#批量设置,K1 V1
mget							#获取多个值
msetnx K1 V1 K4 V4				#此时由于K1已经存在,会导致操作失败,返回0


#设置对象
set user:1{name:zhangsan,age:22}
mset user:1:name zhangsan user:1:age 12	#这里的key_1为user:1:name,表示第一个user的name属性
#获取对象
mget user:1:name user:1:age

#组合命令
getset db redis    			#第一次由于db不存在,所以输出nil,同时这个方法在输出后还会对db进行设置
getset db MongDB			#由于上一次已经设置db为redis,所以会输出redis,同时设置为MongDB

127.0.0.1:6379> setnx mykey redis		#如果mykey的值不存在,则设置为redis
(integer) 1
127.0.0.1:6379> setnx mykey MongDB		#如果mykey的值不存在,则设置为MongDB,如果存在则设置失败
(integer) 0
127.0.0.1:6379> SETEX key2 5 hello		#设置key2的值为hello,5秒后过期
OK
127.0.0.1:6379> ttl key2
(integer) 1

List类型

#可以把List当成栈,队列,阻塞队列,实际上是一个链表

#所有的list命令都是以l开头的
lpush key_1 one					#向key为key_1的队列左边加上一个值one
lpop  key_1						#从左边pop出栈
rpop  key_1						#从右边pop出栈
lindex key_1 2					#通过下标获取值,相当于list[2],下标从0开始,和编程语言保持一致
llen key_1						#获取列表的长度
lrem key_1 2 xiong 				#在key_1中移除掉2个xiong,精确匹配
lrange mylist 0 -1				#相当于遍历mylist
ltrim mylist 0 3 				#相当于截断mylist,会造成mylist的改变
rpoplpush mylist myotherlist    #=rpop+lpush,从右边pop出列表中的第一个元素,并将它放入到新的列表中
								#如果myotherlist不存在,会直接新建myotherlist

linsert							#向列表中插入一个值


ex1:
127.0.0.1:6379> lpush key_1 one 1 "xiong" 
(integer) 3
127.0.0.1:6379> lrange key_1 0 -1
1) "xiong"
2) "1"
3) "one"
127.0.0.1:6379> lpop key_1
"xiong"
127.0.0.1:6379> rpop key_1
"one"
127.0.0.1:6379> lrange key_1 0 -1
1) "1"

ex2:
127.0.0.1:6379> lpush key_1 5 7 8 4 5 one right king xiong kuang sun xu
(integer) 13
127.0.0.1:6379> lrange key_1 0 -1
 1) "xu"
 2) "sun"
 3) "kuang"
 4) "xiong"
 5) "king"
 6) "right"
 7) "one"
 8) "5"
 9) "4"
10) "8"
11) "7"
12) "5"
13) "1"
127.0.0.1:6379> lindex key_1 2
"kuang"
127.0.0.1:6379> lindex key xiong
(nil)


ex3:
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello1"
3) "hello1"
4) "hello2"
5) "hello3"
6) "hello3"
127.0.0.1:6379> ltrim mylist 00 3			#这里写00会造成错误
(error) ERR value is not an integer or out of range
127.0.0.1:6379> ltrim mylist 0 3 
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello1"
3) "hello1"
4) "hello2"

set类型

#命令以s开头
#set里面没有重复的数据,属于无序不重复集合

#用途 : 共同关注,共同爱好,推荐好友...
#比如查看共同关注 : 将A关注的人放到一个集合中,B关注的一个人放到一个集合中,二者求交集

sadd myset hello					#向myset中添加元素hello
smembers	myset					#查看myset中的元素
scard myset							#获取myset集合中的元素个数
srem myset hello					#移除myset中的hello
sismember myset hello				#判断某一个值是否在myset中
srandmember myset 2					#随机获取myset中的2个元素
spop myset							#随机删除掉一个元素
smove myset myset2 hello			#将myset中的hello移到myset2中

sdiff myset myset2					#差集myset-myset2
sinter myset myset2					#交集
sunion myset myset2					#并集

Zest有序集合

#排行榜,分数成绩单排名
#带权重的,例如重要消息等级设置为2,普通消息等级设置为1


zadd myset 1 one 0 two 4 three						#添加多个值,并按照给定的序号进行排序
(integer) 3
zrange myset 0 -1									#从这里可以看出,序号是从1开始,连续递增的
1) "two"
2) "one"
3) "three"

zrem	#移除


zadd salary 2500 zhangsan
(integer) 1
zadd salary 5000 lisi
(integer) 1
zadd salary 100 xiong
(integer) 1
keys *
1) "salary"
2) "myset"
zrange salary 0 -1
1) "xiong"
2) "zhangsan"
3) "lisi"

zrangebyscore salary -inf inf						#实现排序,-inf到inf表示全排序
1) "xiong"											#可以指定范围 例如 -1000 200
2) "zhangsan"
3) "lisi"
zrangebyscore salary -1000 100
1) "xiong"
zrangebyscore salary 0 100 withscores				#同时会将具体的值打印出来
1) "xiong"
2) "100"
zrevrange salary 0 -1								#从大到小排序
zcount myset 1 4									#获取myset中[1,4]的变量的个数

hash类型

#hash更适合对象的存储;
#hash用来存储容易发生变更的数据,尤其是用户信息,一条field对应一个属性,例如username password age...

hset myhash field1 xiong					#设置属性和值,相当于key和value
hget myhash field1							#获取属性对应的值
hmset myhash field1 kuang field2 xiong		#设置多个属性值,并且会将同名属性的值给覆盖掉
hmget myhash field1 field2

hdel muhash field1							#删除myhash中的field1属性和对应的值
hlen myhash									#获取myhash中的长度
hexists myhash field3						#判断myhash中field3是否存在
hgetall myhash								#获取所有属性和它们对应的值
hkeys myhash								#获取所有的key
hvals myhash								#获取所有的value

myhash field3 5								
hincrby myhash field3 2						#给field3对应的值加2,此时field3对应的值为7
hdecrby myhash field3 1						#相当于+(-1)=-1
hsetnx myset field4 hello					#当field4不存在才进行设置,否则失败
原文地址:https://www.cnblogs.com/yimeisuren/p/12640025.html