my redis
NOsql概述
为什么要用nosql:用户的个人信息,社交网络,地理位置,用户自己产生的数据,用户日志等等爆发式增长!
什么是nosql
not only sql(不仅仅是sql),泛指非关系型数据库
NOSQL特点
1、方便扩展(数据之间没有关系,很好扩展)
2、大数据量高性能(1s写8万次,读取11万)
3、数据类型多样性(不需要事先设计数据库)
Redis入门 (http://www.redis.cn/)
Remote Dictionary Server 远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
redis默认端口6379, window下直接双击redis-server.exe和redis-cli.exe
连接成功
Reids Linux安装
1、官网下载
2、移动 mv xxx.jar /opt 解压tar -zxvf xxx.tar.gz
3、客户端连接:redis-cli.exe -h xxx -p 6379
服务器启动:redis-server redis.conf
Redis性能测试 (redis-beanchmark)
Redis基础知识
redis默认有16个数据库: databases 16,默认使用第0个,使用select 3切换数据库,dbsize查看数据库大小
keyss * 查看数据库所有key
flushall 清空全库 / flushdb 清空当前库
Redis是单线程的
快,基于内存操作,cpu不是性能瓶颈,是机器内存和网络宽带。
为什么单线程还这么快?将所有数据全部放在内存,多线程(cpu上下文会切换:耗时的操作),对于内存系统来说,如果没有上下文切换效率就是最高的。
五大数据类型 (做数据库、缓存、消息中间件MQ)
exists key 返回 存在(INTEGER)1 不存在(INTEGER)0
move key 1 将key移动到1库
expire key 10 设置本key的过期时间10秒
ttl key 查看当前key的剩余时间
type key 查看当前key的类型
如何查看命令:
string (字符串。redis不区分大小写操作,加不加“”无所谓,会自动识别成字符串)
append key "hello" 往本key追加字符串,如果不存在当前key,就相当于set
strlen key 返回字符串长度
incr /decr key 自增自减 ,加1减1,浏览量 返回(integer)4,非数字会报错
incrby/decrby key 10 设置步长
getrange key 0(start) 10(end) 截取字符串,end=-1就是全部,闭区间 【0,3】
setrange key 0(start) xxx(value) 替换指定位置开始的字符串
setex key seconds value 设置过期时间
setnx key value 不存在再设置(在分布式锁中常常使用),如果使用set命令,key存在了会覆盖值,
存在就返回(integer)0
mset k1 v1 k2 v2 k3 v3 批量设值
mget k1 k2 k3
msetnx k1 v1 k4 v4 原子性操作,要么全部成功,要么全部失败,返回(INTEGER)0
set user:1 {name:han,age:11} 设置对象de巧妙设计。 或者 mset user:1:name han user:1:age 11
getset k1 v1 如果不存在值,返回nil,如果存在值,获取原来的值,并设置新值
List (列表。所有的命令都是l开头,实际是一个链表,既可作队列,又可做栈,值可以重复)
在redis里面,可以吧list玩成栈、队列、堵塞队列
lpush list a1 a2 a3 a4 a5 插入,返回 (integer)5 。将一个或多个值放到列表的头部(左)
rpush list a6 a7 a8 将一个或多个值放到列表的尾部(右)
lrange list 0 -1 取,-1返回全部,获取顺序a5 a4 a3 a2 a1,(感觉像栈啊。。)没有rrange,闭区间
lpop list 移除list的第一个元素,返回 a5
rpop list 移除list最后一个元素 返回a8
lrem list 1 one 移除list集合中指定个数的值
ltrim list 1(start) 2(end) 通过下表截取指定的长度,这个list已经被改变了,只剩下截取的元素
lindex list 1 通过下标获得list中的某一个值 返回a2
llen list 返回列表的长度 (integer)3
rpoplpush list otherlist 移除列表的最后一个元素,将他移动到新的列表中
lset list 0 item 将列表中指定下标的值替换为另外一个值,相当于更新操作,首先exists list判断列表存不存 在,如果不存在使用lset报错(error)no such key,如果指定下表不存在(无值),报错
linsert list before/after world hello 将某个具体的value插入到列表中某个元素的前面或者后面 返回(integer)4
set(集合。值不能重复)
sadd myset a1..(可多个) set集合中添加元素
smembers myset 查看指定set的所有值
sismember myset a1 判断某一个值是不是在set集合中
scard myset 获取set集合中内容元素的个数
scrm myset a1..(可以多个) 移除set集合中的指定元素
srandmember myset n(可填) 随机抽选出一个元素(n:指定个数)
spop myset 随机删除set集合中的元素
smov myset myset2 a1 将一个指定的值,移动到另外一个set集合
sdiff key1 key2 差集 (以key1位参照,查看key1里面在key2中不存在的)
sinter key1 key2 交集 b站共同好友
sunion key1 key2 并集