码迷,mamicode.com
首页 > 其他好文 > 详细

redis 学习记录

时间:2015-05-03 19:04:55      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:redis   数据库   存储系统   服务器   缓存   

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。[1] 
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
redis的官网地址,非常好记,是redis.io。(特意查了一下,域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地)

目前,Vmware在资助着redis项目的开发和维护。

5种基本type:String hash list set zset
strings
string是最简单类型,是二进制安全的 包含任何数据比如图片和对象序列化

set name hello
get key

setnx 如果k存在返加0 nx note exist 不覆盖,不存在设置新值
setnx name hello

setex 设置k的值为string类型的value 并且指定有效期
setex namex 10 jak 10秒有效期

setrange 设置 指定key的value值 的子字符串

get name
xiaomingxxxxxx@126.com
setrange name 8 aaaaaa 从下标开始 替换指定长度跟替换的一样
get name

mset 一次设置多个key的值 失败全不成功
mset k1 xiaoming k2 xiaohong

msetnx note exis 不会覆盖已经存在的key

getset 设置key的值 并返回key的旧值
getset k1 hello

getrange 获取key的value的子字符串
getrange k1 0 3 从0到第3个返回

mget 批量获取
mget k1 k2

incr 递增
set k3 10
incr k3

incrby k4 10 加指定值 key不存在 则设置key 为认为原来的value为0
incrby k4 -10

decr 对key的值做减减
decrby 指定减

append 给指定key的字符串追加value
append k1 world  返回长度

strlen 返回值长度
strlen k1





hashset类型 是一个string类型的field和value的映射表,它的添加、删除操作都是0(1)(平均)
hash特别适合用于存储对象,相较于将对象的每个字段存成单个string 类型
将一个对象存在hash中会暂用很少的内在,并且可以方便的存取整个对象

hset 设置hash field为指定值  如果key不存在 则先创建
hset myhash field hello
hset user:001 name jak
hget user:001 name

hsetnx user:002 name hello
hmset 批量设值
hmset myhash field hello field2 world

hmget 获取所有健
hmget user:002 name age x 批量返回

hincrby user:002 age 10 自增

hexists hash表字段是否存在
hexists user:002 age

hlen返回指定hash的key数
hlen user:002

hdel 删除指定hash的field字段
hdel myhash age

hkeys 返回hash所有字段
hkeys user:002

hvals 返回hash所有value
hvals user:002

hgetall 获取某个hash中全部的字段和值
hgetall user:002


==================list start===========================
list是一个链表结构,主要功能是push,pop,
获取一个范围的所有值等等,操作中key理解为链表的名字。
redis的list类型其实就是一个每个子元素都是string类型的双向链表。
我们可以通过push pop操作从链表的头部或者尾部添加删除元素
这样list即可以作为栈,又可以作为队列。

push 压入一个元素
pop  弹出一个元素

lpush 从头部压入一个元素 先进后出
lpush mylist world
lpush mylist hello

lrange mylist 0 -1 取元素
hello 
world

rpush从尾部压入元素  先进先出 队列
rpush list2 jak
rpush list2  tom

lrange list2 0 -1
jak
tom

linsert 在key对应list的特定位置前或后添加字符串
linsert list2 before jak sum

lset 设置list中指定下标元素替换掉
lset list2 1 updatev

lrem 从key对应list中删除N个和value相同的元素
(n<0从尾删除,N=0全部删除)
lrem list2 2 jak 删除 几个元素

ltrim 保留指定key的值范围内的数据
ltrim list2 1 -1 把第0个删掉

lpop 从list的头部删除元素 并返回删除元素
lpop list2 

rpop 从尾部弹出一个元素
rpop list2

lpoplpush 从第一个list的尾部移除元素并添加到第二个list的头部
lpoplpush list2 list3

lindex 返回名称为key的list中index位置的元素 
linex  list2 0
lindex list2 1

llen 返回key对应list的长度s
llen list2
==================list end===========================



===========sets 无序集合================
sadd myset1 one
sadd myset1 two
sadd myset1 two  不能增加重复值

smembers myset1 查看元素

srem 删除
srem myset1 one

spop 随机弹出元素

sdiff 返回所有给定key与第一个Key的差集
sdiff myset1 myset2

sdiffstore 存储差集的值
sdiffstore myset3 myset1 myset2

sinter 交集
sinter myset1 myset2
sinterstore  存储交集的值

sunion 返回所有给定key的并集
sunion myset1 myset2
sunionstore 存储并集

smove 从第一key对应的set中移除元素并添加到第二个对诮的set中
smove myset1 myset2 three 把three从1移到2中

scard 返回名称key的集合个数


sismember 测试元素是否是名称为key的Set的元素
sismember myset1 two 返回1代表是
sismember myset1 twox 返回0代表不是


srandmember 随机返回集合的一个元素 ,但不删除元素
srandmember myset1

====================







=============sorted sets 有序集合===========================

是set的一个升级版本 加一个顺序属性
zset会自动重新排序, 可以理解为有两列的mysql表
一列存value 一列为顺序,操作过程中 key可以理解为名称

zadd 向名称为key的zset中添加元素member,score用于排序
如果该元素存在,则更新其顺序
zadd myzset 1 one
zadd myzset 2 two
zadd myzset 3 two 会把顺序更新为3
zrange myzset 0 -1 withscores 0第一个位置 -1 最后一个

zrem 删除名称为key的zset中的元素member
zrem myzset1 one

zincrby 以指定值增加
如果在名称为key的zset中已经存在元素
memebre,则该元素的score增加incremernt否则
向该集合中添加该元素,其score的值为increment
zincrby myzset 4 two 对顺序号进行增加
-数为减

zrank 返回名称为key的zset中memebr元素的排名
(按score从小到大排序) 即下标
zrank myzset1 two







redis 学习记录

标签:redis   数据库   存储系统   服务器   缓存   

原文地址:http://blog.csdn.net/liangrui1988/article/details/45460139

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!