Redis笔记
http://redis.cn/
==================================
大数据时代的3v: 主要是描述问题的
1.海量Volume 2.多样 Variety 3.实时Velocity
大数据时代的3高: 主要是对程序的要求
1.高并发 2.高可扩 3.高性能
===================================
redis是单线程的
Redis是很快的,官方表示,Redis是基于内存操作,CPU不是redis性能瓶颈个,
Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了。
Redis是C语言写的,官方提供的数据为100000+的QPS,完全不比同样是使用key-value的Memecache差。
Redis为什么单线程还这么快?
1.误区一:高性能的服务器一定是多线程的?不一定
2.误区二:多线程(CPU上下文要上下文切换)一定比单线程效率高。
速度:CPU>内存>硬盘
核心: Redis是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,
多线程(CPU上下文会切换:耗时操作),对于内存系统来说,如果没有上下文切换效率就是最高的。
多次读写都是在一个CPU上的,在内存情况下这个就是最佳的方案。
===================================
基本命令
1.切换数据库(默认16个数据库)
select 0-15
select 15
2.查看数据库大小
dbsize
3.插入数据
set name wlq
4.取出数据
get name
5.查看所有的key
keys *
6.清空当前数据库
flushdb
7.清空所有数据库
flushall
8.判断键是否存在
exists name
9.把键值对移到其他数据库
move name 1
10.为键值对设置过期时间
expire name 10 (10秒后过期删除)
ttl name (查看剩余的时间)
11.查看类型
type name
===================================
五大数据类型
一、String(字符串)
1.追加字符串
append name wlq # 追加字符串,如果当前的key不存在,就相当于set key
2.获取字符串的长度
strlen name
3.数量加减
set views 0
incr views # 自增1
decr views # 自减1
incrby views 10 # 加10
decrby views 5 # 减5
4. 字符串范围 getrange
getrange name 0 2
getrange name 0 -1 (获取全部字符串)
5.替换字符串 setrange 替换指定位置的字符串
# name "wlqwlqzhc123"
setrange name 1 oo # "woowlqzhc123"
6.设置过期时间
setex (set with expire) # 设置过期时间
setnx (set if not exist) # 不存在再设置(在分布式锁中会常常使用)
setex key 30 hello # 设置key3的值为hello,30秒后过期
ttl key
setnx mykey wlq # 如果mykey不存在,创建mykey
setnx mykey zhc # 如果mykey存在,创建失败
7.设置多个值 (mset)
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
4) "mykey"
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> mset k1 v1 k4 v4
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "k3"
4) "k4"
5) "mykey"
127.0.0.1:6379> msetnx k1 v1 k5 v5
(integer) 0
127.0.0.1:6379> get key5
(nil)
127.0.0.1:6379>
8.对象
set user:1{name:wql, age:21} # 设置一个user:1对象,值为json字符来保存一个对象
# user:{id}:{filed}
127.0.0.1:6379> mset user:2:name wlq user:2:age 22
OK
127.0.0.1:6379> mget user:2:name user:2:age
1) "wlq"
2) "22"
9.组合命令 getset
127.0.0.1:6379> getset db redis # 如果不存在,则返回nil
(nil)
127.0.0.1:6379> get db
"redis"
127.0.0.1:6379> getset db mongodb # 如果存在值,获取原来的值,并设置新的值
"redis"
127.0.0.1:6379> get db
"mongodb"
127.0.0.1:6379>
================
二、List
所有的List命令都是用l开头的
1.lpush rpush lrange
127.0.0.1:6379> lpush list one # 将一个值或者多个值,插入到列表的头部(左)
(integer) 1
127.0.0.1:6379> lpush list two
(integer) 2
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1 # 获取list中的值
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrange list 0 1
1) "three"
2) "two"
127.0.0.1:6379> rpush list right 将一个值或者多个值,插入到列表的头部(右)
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
============
2.lpop rpop
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
127.0.0.1:6379> lpop list # 移除list的第一个元素
"three"
127.0.0.1:6379> rpop list # 移除list的最后一个元素
"right"
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379>
============
3.lindex
127.0.0.1:6379> lrange list 0 -1
1) "two"
2) "one"
127.0.0.1:6379>
127.0.0.1:6379> lindex list 0 # 通过下标获取list中的某一个值
"two"
127.0.0.1:6379> lindex list 1
"one"
127.0.0.1:6379>
============
4.Llen(返回列表的长度)
127.0.0.1:6379> Llen list
(integer) 2
============
5.lrem 移除指定数量的value
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 three
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lrem list 1 one
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379>
============
6.ltrim 截取指定范围
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> ltrim list 0 1
OK
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379>
============
7.rpoplpush # 移除列表的最后一个元素,将他移动到新的列表中
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379>
127.0.0.1:6379> rpoplpush list list2
"two"
127.0.0.1:6379> lrange list 0 -1
1) "three"
127.0.0.1:6379> lrange list2 0 -1
1) "two"
127.0.0.1:6379>
================================================
8.lset 将列表中指定下标的值替换为另一个值,更新操作
127.0.0.1:6379> lrange list 0 -1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> lset list2 0 item # 如果不存在列表我们去更新就会报错
(error) ERR no such key
127.0.0.1:6379> lset list 0 item # 如果存在,更新当前下标的值
OK
127.0.0.1:6379> lrange list 0 -1
1) "item"
2) "v2"
3) "v1"
127.0.0.1:6379> lset list 4 v4 # 如果不存在,则会报错
(error) ERR index out of range
127.0.0.1:6379>
================================================
9.linsert # 将某个具体的value插入到列表中某个元素的前面或者后面
Redis学习笔记
最新推荐文章于 2024-04-27 17:45:49 发布