Redis(一)安装、使用
常识
磁盘
- 寻址(毫秒ms)
- 带宽(G/m)
内存
- 寻址(纳秒ns)
- 带宽
数据库排名网站
Redis中文官网
Redis数据类型
- String
- 字符
- 数值
- bitmap
- hash
- list
- set
- sorted set
memcached与Redis对比
- memcached无数据类型的区分(若使用json存储数据也能实现多样性的数据存储)
- redis中针对每种数据类型都有自己的方法可以访问其中的元素,而不用读取全量数据然后进行处理获取元素
计算向数据移动
Redis安装
#安装wget用于下载安装文件
yum install wget
#创建下载目录
mkdir ~/soft
cd ~/soft
#下载安装文件
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
#解压
tar xf redis-5.0.5.tar.gz
#阅读README并按照文档安装
#编译源码
make
#执行make报错,清理
make discclean
#安装到指定路径
make install /path
#将redis安装注册为服务
vi /etc/profile
#注册redis服务,路径为make install中指定的路径
export REDIS_HOME=/opt/redis
export PATH=$PATH:$REDIS_HOME/bin
#重装profile
source /etc/profile
#输出PATH确认配置是否生效
echo $PATH
#执行utils目录中的install_server.sh
linux epoll
安装使用手册
yum install man man-pages
#man手册包含8类文档,可以通过参数指定查看的手册类别
man 2 read
#查看某个进程对应的文件描述符
cd /proc/[pid]/fd
#如果权限不足先执行一下命令
sudo -i
#查看socket手册
man 2 socket
man 2 select
#内存映射(用户态内核态)
man 2 mmap
man epoll
#0拷贝
man sendfile
linux系统中,多个线程或者进程通过read fd*读取内核kernel中的文件描述符时,可能会被阻塞;但文件描述符fd本身是非阻塞的,通过一个专门的线程轮询访问内核空间的文件描述符使之成为非阻塞的NIO,轮询发生在用户空间,但当并发访问文件描述符时需要轮询访问内核;因此内核引入了select可以一次批量访问多个文件描述符,减少内核态用户态的切换(多路复用);mmap引入了用户与内核共享空间的映射;当一个请求需要读取文件时,系统首先将文件读取到内核空间,而后从内核空间拷贝到用户空间再通过用户空间返回内核空间从而返回给请求方,sendfile消除了用户空间和内核空间之间的IO操作,实现了0拷贝
常用命令
#查看所有的key
keys *
#查看@string类型的编码(数据类型)
object encoding key
二进制安全(binary safe)
SDS(Simple Dynamic Strings)
Redis数据类型
@string
#Set the string value of a key
set key value [EX seconds | PX milliseconds] [NX | XX] [KEEPTTL]
get key
#Set multiple keys to multiple values
mset key value [key value ...]
mget key [key ...]
msetnx key value [key value ...]
#Set the value and expiration of a key
setex key seconds value
#Set the value of a key, only if the key does not exist
setnx key value
#Set multiple keys to multiple values, only if none of the keys exist
msetnx key value [key value ...]
#Get the length of the value stored in a key
strlen key
#Append a value to a key
append key value
#Increment the integer value of a key by one
incr key
#Increment the integer value of a key by the given amount
incrby key increment
#Decrement the integer value of a key by one
decr key
#Increment the float value of a key by the given amount
incrbyfloat key increment
#Decrement the integer value of a key by the given number
decrby key decrement
#Get a substring of the string stored at a key
getrange key start end
#Overwrite part of a string at key starting at the specified offset
setrange key offset value
#Set the string value of a key and return its old value
getset key value
@bitmap
#设置位值
setbit bit1 1 1
setbit bit1 7 1
strlen bit1
setbit bit1 9 1
strlen bit1
#通过setbit设置的key在使用get进行获取时会显示ascii码对应的字符
get bit1
#Find first bit set or clear in a string
bitpos key bit [start] [end]
bitpos key1 1 0 1
#Count set bits in a string
bitcount key [start end]
#perform bitwise operations between strings 对字符串进行位操作
bitop operation destkey key [key...]
bitset key2 1 1
bitset key2 6 1
bitop and bitopkey key1 key2
get bitopkey
#Returns the bit value at offset in the string value stored at key
getbit key offset
使用场景
使用长度大于365位的bitmap记录用户登录天数
@list
#注意lpush和rpush元素存储的顺序
lpush list1 a b c d e f
rpush list2 a b c d e f
lrange key 0 -1
lindex key idx
lset key idx value
#insert an element before or after another element in a list
linsert key [before | after] pivot value
#remove elements from a list
lrem key count element
lrem list1 -2 a
#阻塞操作
blpop key [key ...] timeout
brpop key [key ...] timeout
#trim a list to the specified rangekey
ltrim key start stop
list可以作为栈、队列、数组、阻塞(单播)队列进行使用
@set
sadd key member [member...]
sadd student zhangsan lisi
#get the number of members in a set
scard student
#subtract multiple sets
#多个set的差集key1-key2-key3
sdiff key1 key2 key3
#将多个set的差集保存到指定的key
sdiffstore diffcontain key1 key2
#intersect multiple sets
#多个set的交集
sinter key1 key2
sinterstore key1 key2
#determine if a given value is a member of a set
sismember key value
#get all the members in a set
smembers key
#move a member from one set to another
smove source destination member
#remove and return one or multiple random members from a set
#spop也可以实现抽奖程序
spop key
#get one or multiple random members from a set
srandmember key [count]
#当srandmember的count参数为正时会返回尽量满足count个不重复的元素当集合中元素个数不够时只返回所有集合元素,当count为负时则会随机返回指定的元素个数,可能会重复
srandmember key1 -10
#通过srandmember key -n可以实现可重复中奖的抽奖程序
sadd members zhangsan lisi wangwu zhaoliu
srandmember members -3
#remove one or more members from a set
srem key member [member...]
#incrementally iterate set elements
sscan key cursor [MATCH patter] [COUNT count]
#add multiple sets
sunion key1 key2
sunionstore keyd key1 key2
@sorted_set
- 当元素的score相等时按照字典序排列
- 物理内存中按照从小到大的顺序进行存储
- 使用skip list实现排序操作
- 随机造层
#Add one or more members to a sorted set, or update its score if it already exists
zadd key [NX | XX] [CH] [INCR] score member [score member ...]
#Return a range of members in a sorted set, by index
#WITHSCORES参数表示是否返回元素对应的score,默认不返回
zrange key start stop [WITHSCORES]
#Return a range of members in a sorted set, by index, with scores ordered from high to low
zrevrange key start stop [WITHSCORES]
#Return a range of members in a sorted set, by score
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
#Get the score associated with the given member in a sorted set
zscore key member
#Determine the index of a member in a sorted set, start from 0
zrank key member
zincrby key score member
@hash
#Set the string value of *a* hash field
#对hash进行单个属性值的设置(也可以设置多个)
hset key field value [field value ...]
#Set the value of a hash field, only if the field does not exist
hsetnx key field value
#Set multiple hash fields to multiple values
hmset key field value [field value ...]
#Get the value of a hash field
hget key field
#Get the values of all the given hash fields
hmget key field [field...]
#Get all the fields and values in a hash
hgetall key
#Get all the keys in a hash
hkeys key
#Get all the values in a hash
hvals key
#Delete one or more hash fields
hdel key field
#Determine if a hash field exists
hexists key field
#Get the number of fields in a hash
hlen key
#Increment the integer value of a hash field by the given number
hincrby key field increment
#Increment the float value of a hash field by the given amount
hincrbyfloat key field increment
#Incrementally iterate hash fields and associated values
hscan key cursor [MATCH pattern] [COUNT count]

浙公网安备 33010602011771号